...Today's fractal. (I've had a couple hundred of these sitting around forever in my Flickr account, which I've started sorting through as I think about redistributing its contents elsewhere and closing it down.)
The best of these will probably pop up here on and off over the next couple of weeks.
Each of the four formulas is filled into 72900 cells to make 270px images. The first grid picks a complex number c = x+yi. The second grid iterates Mandelbrot's rule: c is in the Mandelbrot set if and only if the sequence zₙ₊₁ = zₙ² + c does not diverge. The third grid makes the previous iteration's zₙ₊₁ into the current iteration's zₙ (unless the pause button is set in cell A1 - then this grid reverts to z₀ = c.) The fourth grid takes the absolute value of zₙ so I can show you its magnitude with conditional formatting!
At the top of the post is the fourth grid in iterations z₁ through z₉ with -2<x<1 and -1.5<y<1.5. The ranges for x and y are set dynamically so I can zoom into the fractal arbitrarily :)
Here are the red, green and blue locations from my earlier survey of the Mandelbrot set via its Julia sets.
Or, you can peruse the rest of my Excel fractal art.
I realized I hadn't shared this here yet! Here's my 3D printed Quaternion Julia Set! See I first learned of these things reading about it from a pretty well known graphics programmer Inigo Quilez. Theirs are a lot prettier! But yeah, if you're familiar with Julia Sets and the Mandelbrot set already, this is basically that but we use 4D complex numbers called quaternions instead of the regular old complex numbers.
The original shaders I used to render them were unity CG/HLSL implementations, but this particular one is from a GLSL implementation over on my shadertoy you can find here:
https://www.shadertoy.com/view/tdt3W8
It isn't exactly the same one that I've printed here (I've long lost the exact seed) but it is reasonably close. The way I printed it was I stole some marching cube code for blender and just plugged in the SDF function derived by Inigo Quilez, tweaked the values and eventually got a mesh I can print!
This uh, isn't the one I used lol. It did take a few tries to get one that was both visually interesting and also printable.
In fact i wasn't even using the marching cube algorithm at first. I was using Poisson Surface Reconstruction with a python script that casted points to form a point cloud. Basically I was attempting to create a mesh like you would with photogrammetry, just with an abstract object rather than an actual thing or place.
The results were, well not good lol.
*Continues digging through box* I know its around here some where, I should have the one that works.
Okay this still isnt it but this one is using the same method, I just wanted to use this for a vrchat world instead of using it for 3D printing. It gets the point across lol
But yeah. 3D printing is really cool if you're into a bit of math
I added some crude functions to the ROM monitor on my Wrap030 project to read the root directory of a FAT16-fomatted disk and load binary files into memory to execute. This opens up a new option for developing programs and running them on the computer, and makes it easier to keep programs on-hand for loading when I demonstrate the computer.
So what new program do I build first for running from disk? The same Mandelbrot renderer I've been using all along, of course! All I needed to do to get it running from disk was adjust a few load instructions to use PC-relative addressing and then change the vasm output to raw binary.
It ran without issue ... mostly. I had been noticing some instability with the system in general. It's not really related to the programming work I've been doing, it just tended to show itself more when doing the kind of FPU-intensive processing required for the Mandelbrot program. Sometimes the system wouldn't boot at all, sometimes it would continually reset. Other times it would run fine for a while, but randomly throw a coprocessor protocol exception (especially when using double- or extended-precision floating point values).
I had a pretty good idea of where this instability was coming from ...
As someone on Discord put it, that's a pretty little antenna I've got there.
High speed computers don't like excessively-long wiring between components. I made the ribbon cables long because there were other boards I developed for this system. But, I'm only using the CPU board, the FPU + IDE mezzanine board, and the video generator board. All that extra wire is just making things more difficult.
A year ago, when I first put these three boards together, I had to bump the bus speed down to 25MHz to get it to run. I could run the CPU board up to 56MHz by itself, and I could get it to run with one expansion board or the other up to 40MHz, but with all three boards, 25MHz was the best I could do (out of the oscillators I had on hand). I have some 33MHz oscillators now, and while I could get it to run sometimes, it was obviously far more unstable.
It was time to trim those pretty little antennas.
I left room for one more card, in case I can get my DRAM card working later, but trimmed a few inches off. The result? Rock solid at 25MHz now.
... and at 32MHz.
... but 40MHz still doesn't run.
I am quite pleased with that result. My target for this system in the beginning was 25MHz. That extra 30% speed increase is very noticeable, especially when running a program like the Mandelbrot renderer.
But I had a thought.
My FPU is rated for 25MHz, and here it's running solid at 32MHz along with the rest of the system. But my FPU board was designed to support the FPU running at a separate clock speed from the rest of the system (the 68881/68882 FPU is actually designed to support this, so I implemented it when I built my mezzanine board).
What would happen if I tried running the FPU even faster? Perhaps using that 40MHz oscillator that I couldn't use for the complete system?
Surprisingly, not a problem running the CPU at 32MHz and the FPU at 40MHz.
... or 50MHz
... or 55MHz
... or 67MHz!
Once again, I've run out of faster oscillators. This computer is running stable with its FPU clocked at over two and a half times its rated speed.
The video above is a real-time capture of the VGA output of this machine running that Mandelbrot renderer (now modified to use 96-bit extended-precision floating-point arithmetic!) with the CPU & main bus clocked at 32MHz and the FPU clocked at 67MHz. Some frames take minutes to render. Some complete in as little as seven seconds.
I am in awe. While I had big dreams when I first started working on this project six years ago, I never could have imagined it running this well at that kind of speed. I am very happy with how this project has turned out so far, and can't quite believe I actually built something like this.
I typically wrap up these posts with a plan of where to take the project next, but the project has already exceeded my expectations. There is so much it is already capable of now that I have a permanent storage option available. I guess I could try getting that DRAM card running to expand the main memory beyond 2MB, or try adding a keyboard and some text routines to complement the video card. Both are good options towards getting a proper operating system running, which has always been a goal of the project.
Do you have any recommendations for free resources like books, podcasts, videos or courses that help an autodidact get a first glimpse of chaos theory or game theory? Both topics will probably come up at my workplace and I felt you'd be a good person to ask! Thank you for your time
I'm glad you came to my ask box; Currently I do not remember most of the resources I once used, but once I remember I will reblog that post.
- Benoit B. Mandelbrot's book "The fractal geometry of nature" is pretty good for getting a good "visualized idea" of the topic of chaos theory, fractal geometry and dynamical systems. It uses helpful analogies and some parts are really awe-inspiring - overall, good food for the imagination as well!
In the meanwhile:
Does anyone of my mutuals/followers/[other humans seeing this post] know any good (introductory) resources about chaos theory and game theory?
How have I never done this before? This looks *arcane*
Basically I'm just throwing the uv's through the mandelbrot function a few times and sampling based on that. The texture isn't even like, regular or anything its a lighting bake
Eventually the NaN's start creeping in from the edges and you get this familar image