Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Caml-list] MLbrot: Mandelbrot Set in OCaml

104 views
Skip to first unread message

Daniel de Rauglaudre

unread,
Nov 8, 2010, 10:03:18 AM11/8/10
to caml...@inria.fr
Hi everybody!

New release of MLbrot: 1.00

MLbrot is a program allowing to explore the Mandelbrot Set and produce
nice fractal images. With some extra work, can produce videos. Can be
helped by other computers, via internet, to speed up images calculations.

Interfaced with 3 graphic toolkits: Lablgtk2, OpenGL and Olibrt. You
can choose the one(s) you want at configure time, or let the 'configure'
shell to select the ones it finds.

Best interface is with Lablgtk2 (it has menus and progress bars).

Web site and download at:
http://pauillac.inria.fr/~ddr/mlbrot/

You need OCaml and Camlp5 to compile.
You need at least one library installed: Lablgtk2, OpenGL or Olibrt.
Very useful library too: GMP/MPZ to display deep images (zoom > 2^46).

Documentation not yet done. Just launch it, try out option -help
and/or ask me.

Enjoy!

--
Daniel de Rauglaudre
http://pauillac.inria.fr/~ddr/

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Goswin von Brederlow

unread,
Nov 8, 2010, 11:07:39 AM11/8/10
to Daniel de Rauglaudre, caml...@inria.fr
Daniel de Rauglaudre <daniel.de_...@inria.fr> writes:

> Hi everybody!
>
> New release of MLbrot: 1.00
>
> MLbrot is a program allowing to explore the Mandelbrot Set and produce
> nice fractal images. With some extra work, can produce videos. Can be
> helped by other computers, via internet, to speed up images calculations.
>
> Interfaced with 3 graphic toolkits: Lablgtk2, OpenGL and Olibrt. You
> can choose the one(s) you want at configure time, or let the 'configure'
> shell to select the ones it finds.
>
> Best interface is with Lablgtk2 (it has menus and progress bars).
>
> Web site and download at:
> http://pauillac.inria.fr/~ddr/mlbrot/
>
> You need OCaml and Camlp5 to compile.
> You need at least one library installed: Lablgtk2, OpenGL or Olibrt.
> Very useful library too: GMP/MPZ to display deep images (zoom > 2^46).
>
> Documentation not yet done. Just launch it, try out option -help
> and/or ask me.
>
> Enjoy!

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?

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? Also do you have a coloring mode using
distance estimation? E.g. color all points < 0.5 pixels distance from
the M-Set white.

Can you zoom and refine the image like xaos does?

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.


You say you are using OpenGL, so where are the 3D images?

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:
http://mrvn.homeip.net/mandelbrot/

If you are interested I can share the algorithm for the height
calculation (which is all you really need) and example source for this
(just don't have it at hand at the moment or I would just paste it
here).

MfG
Goswin

Daniel de Rauglaudre

unread,
Nov 9, 2010, 6:02:16 AM11/9/10
to caml...@inria.fr
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 :-)

> 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.

> 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:
> http://mrvn.homeip.net/mandelbrot/

Interesting, but I would prefer something more 3D, like cauliflowers.

Thank you for your message!

Goswin von Brederlow

unread,
Nov 9, 2010, 6:57:16 PM11/9/10
to Daniel de Rauglaudre, caml...@inria.fr
Daniel de Rauglaudre <daniel.de_...@inria.fr> 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 :-)

Guessing:
=========

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.

or

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
variable.


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.

Tesseracting:
=============

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.

MfG
Goswin

Daniel de Rauglaudre

unread,
Nov 10, 2010, 5:36:33 AM11/10/10
to Goswin von Brederlow, caml...@inria.fr
Hi,

On Wed, Nov 10, 2010 at 12:57:05AM +0100, Goswin von Brederlow wrote:

> Guessing:

Ah, yes, I already did that, I found that on the Web, I did not know
it was called "guessing". I loop with chunks 16, 8, 4, 2 and 1.

> Boundary Trace:
> Tesseracting:

Both interesting indeed! Ok, I look at them! Thanks a lot!

> 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.

I already do that.

0 new messages