Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
MLbrot: Mandelbrot Set in OCaml
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2010-11-09 (23:57)
From: Goswin von Brederlow <goswin-v-b@w...>
Subject: Re: [Caml-list] MLbrot: Mandelbrot Set in OCaml
Daniel de Rauglaudre <> writes:

> Hi,
> On Mon, Nov 08, 2010 at 05:07:33PM +0100, Goswin von Brederlow wrote:
>> Only looked at the pictures so far but they do look good. I'm missing
>> some screenshots though. How does the interface look like? I assume you
>> have some way to select a part of the image to zoom?
> When clicking with left button, you zoom (twice) centered to that
> point. Middle button: recenter. Right button: unzoom. And the keys
> 'z' and 'x' zoom and unzoom, 'Z' and 'X' do it 10 times.
>> It would also be nice to know a bit more about what drawing methods you
>> support. Do you just compute every pixel or do you support guessing,
>> boundary trace, tesseracting?
> I compute every pixel. I searched on the Internet for faster algorithms
> but I did not find. What are guessing, boundary trace and tesseracting ?
> Well, I am going to google these terms :-)


Compute the image in a low resolution, e.g. every 4th pixel and every
4th row.

A) If the 4 corners of a square are the same color then guess the
square is all the same color.


B) If 3x3 computed pixels are the same color guess that there is a
uniformly colored square around the center pixel, a square formed by the
centers of the 4 squares formed by the pixel.

#   #   #

  |   |
# | # | #
  |   |

#   #   #

Now compute every 2th pixel and every 2th row where you haven't computed
or guessed. Guess again. Compute the remaining pixels. You can also
start with every 8th pixel/row or 16th. The number of passes should be

Boundary Trace:

We know the M-Set is all connected. The bands of color we draw with
various methods are also conected. So we don't have to compute the
interior of each color band or the M-Set, we only need the boundary.
Start in the top left corner and compute right until the color
changes. You have found a boundary. Follow the boundary till you've
closed the area and fill it with the color. Repeat with the next
uncolored pixel.


Compute the borders of the image. If the border is all one color the
interior is all one color. Otherwise divide into 4 parts and repeat.

>> Also do you have a coloring mode using distance estimation?
>> E.g. color all points < 0.5 pixels distance from the M-Set white.
> No. I see that I have many things to learn... :-)
>> Can you zoom and refine the image like xaos does?
> I did not know xaos, so I installed it, and tested it a little. Well, it
> is very fast indeed! Yes, I refine the image (you mean around Mandelbrot
> islands ?) by extending the number of iterations some times.

No. I mean like xaos does. When zooming in it keeps the computed pixels
and only inserts new lines or rows where there are gaps. One effect of
this is that in an animation the chaotic part of the image, where color
for every pixel differs to the next, doesn't just flicker.

>> Do you support the single orbital iteration method? That puts a 3x3
>> points grid over the image plus 4 control points. Points of the image
>> are aproximated from the 9 grid points. The 13 points are iterated a few
>> iterations as long as the 4 reference points are close to approximating
>> the same points. If the error becomes to great you go back an iteration,
>> subdivide the grid into 4 parts, approximate the missing point and
>> repeat for each subgrid. Esspecially on dep zooms this can speed up
>> calculations by magnitudes since the first few thousand iterations of
>> each point will be done by calculating only 14 points and approximating.
> Oops, I have to read that again, that seems interesting but at the
> first reading, I don't understand everything.
>> You say you are using OpenGL, so where are the 3D images?
> History:
> I was just looking for a graphic toolkit instead of mine (olibrt,
> which is old and works only on X Window). Many people here (Inria)
> use OpenGL, to indeed doing 3D, so I tested, but only in 2D. Well,
> actually, I tested it on a mini-small-tiny-mplayer I wrote in OCaml:
> OpenGL is interesting because of Direct Rendering which accelerate the
> displaying.
> So, I tested OpenGL in Mlbrot, after having separated the graphic
> toolkit from the rest of the program. Perhaps, that makes it work
> under Mac and Windows? I don't know. And a few days ago, I tested
> with Gtk, which appears to be the good solution and I continue
> programming with it.
> Perhaps I try out the 3D feature of the Mandelbrot Set one day. I just
> looked at a couple of sites talkint about it.
>> I've converted some 20 year old code into ocaml a while back that
>> generates 3D images. Putting the height map into OpenGL and render it
>> through that would probably improve the quality:
> Interesting, but I would prefer something more 3D, like cauliflowers.
> Thank you for your message!