Mandeldot

Mandeldot is a program that visualizes the Mandelbrot set, a special collection of complex numbers.
There are many such programs. This is the one I wrote finally, after having committed to doing so some three decades ago. The linked article goes into much more depth about what the Mandelbrot set is and how it’s computed. You may also be interested in the article about fractals, an important concept in understanding the set.
You can download the program by using the link below. The program requires Windows running .NET 4.5. If you don’t have .NET 4.5 installed, the installer might prompt you to download and install it, but you can also download it from Microsoft by clicking here.

The program is meant to be easy to use. You can use the mouse to drag and select a new region to examine more closely (“zoom” in). You can change the “drag mode” to simply pan instead of zooming (use the “Drag mode” option in the “View” menu, or simply hold down the Shift key while dragging). For additional information on how to use the program, see the tips and documentation below.

Tips for using the program (detailed documentation below):

Like similar programs, Mandeldot draws the actual set using black pixels, and uses colors for the rest of the pixels surrounding the set, where the color used corresponds to how fast a pixel not in the set is “escaping” the set. Colors are assigned from a bright “rainbow” palette. This color palette has the advantage that it’s easy to define, but it does lack contrast. If your image seems to be lacking in detail, try adjusting the color offset in the options to find a range of colors that shows contrast better.

One interesting feature of the Mandelbrot set is that it’s a “connected space”. Over-simplifying quite a lot, a connected space is made of points where between any two points, there exists a continuous path of other points in the same set. This means that in theory, all of the points in the set drawn by Mandeldot should touch, but in fact the connection isn’t always visible due to the non-infinite screen resolution used by your computer (never mind the non-infinite resolution of your eyes). You can often make the connections easier to see in the program by reducing the maximum iteration count in the options. Doing so has the effect of erroneously considering points to be in the set when in fact they are simply “close”, making it easier to see the paths of connected points that are in the set.

Another side-effect of the non-infinite nature of your computer is that while the set itself, being a fractal, has an infinite degree of detail (i.e. no matter how closely you look at it, there is the same amount of detail), your computer will eventually reach the limit of being able to distinguish between one complex number and another. When you reach this point, the image will show larger groups of pixels all the same color. If this happens, you’ve gone too far. Zoom back out a bit and things will go back to normal.

Especially as you look at areas close to the set, or where the set wraps around itself, you may find that the image gets kind of “noisy”, in the sense that the color changes dramatically from one pixel to the next. A future version of the program will support alternate coloring methods that will have less of a problem with this. In the meantime, one effective way of smoothing the colors out is to set the image size to something larger than you actually want to look at, and then adjust the view zoom to an appropriate percentage to bring the image back down to the right size. E.g. instead of rendering the set in a 512 by 512 image, use 1024 by 1024 and view it at 50% zoom factor. In scaling the image down to size, the pixels will be blended together and evened out. Yes, it will take longer to render the image this way, but it’s often worth the effort. Try different combinations to see which you prefer: triple the size then view at 33%, or quadruple the size and view at 25%, etc.

Of course, it’s faster and more fun to navigate around the set when the rendering is faster. To speed things up, reduce the image size (I find 512 by 512 pixels works well) and lower the maximum iteration count. Note though, if you zoom in far enough and all you get is black for your image, you may simply need to increase the maximum iteration count again. (Obviously, there are some places where you can’t get anything but black, but it’s usually pretty easy to avoid zooming straight to those areas).

Play. Explore. Have fun!

Documentation:

File menu:

Image menu:

View menu:

Options dialog:

Custom Scale dialog:

JPEG Quality dialog:

Glossary (of terms that may be unfamiliar, or unique to this page):

aspect ratio — the ratio of the the image’s horizontal dimension to its vertical dimension.

iteration — for each pixel in the image, the program starts with the corresponding complex value (based on what area the image is showing), repeatedly squaring and adding the result to the original complex value; this repetitive computation is the iteration that ultimately determines the pixel’s color.

largest square visible — for non-square images, one can imagine a square in the middle that has all four sides the same length as the shorter dimension of the actual image; this is the largest square visible in the image, and is used to determine how the rendering coordinates are interpreted (i.e. they are interpreted as if the image were this square…that’s why only three values are needed to describe the area being rendered).

render — to draw the image, by calculating for each pixel whether it’s in the set, and if not, assigning a color other than black to it.

selected area — the boundary, expressed as components of a complex number and a dimension, that describes the area of the set being viewed.

thread — a sequence of computer instructions executing within a program; running more than one of these concurrently allows a computer with more than one processor to compute the color for more than one pixel at a time, allowing the whole image to be rendered more quickly.

Harveyware