From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id D1189BBAF for ; Wed, 10 Nov 2010 00:57:05 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah8BAJtu2UzZSMDjkWdsb2JhbACiJxUBAQEBCQsKBxEDH70ChUoEjWI X-IronPort-AV: E=Sophos;i="4.59,176,1288566000"; d="scan'208";a="65357399" Received: from fmmailgate02.web.de ([217.72.192.227]) by mail3-smtp-sop.national.inria.fr with ESMTP; 10 Nov 2010 00:57:05 +0100 Received: from smtp02.web.de ( [172.20.0.184]) by fmmailgate02.web.de (Postfix) with ESMTP id 95C87180869F5; Wed, 10 Nov 2010 00:56:56 +0100 (CET) Received: from [78.43.204.177] (helo=frosties.localdomain) by smtp02.web.de with asmtp (TLSv1:AES256-SHA:256) (WEB.DE 4.110 #24) id 1PFy3b-0007jH-00; Wed, 10 Nov 2010 00:56:56 +0100 Received: from mrvn by frosties.localdomain with local (Exim 4.72) (envelope-from ) id 1PFy3b-0003Wp-44; Wed, 10 Nov 2010 00:56:55 +0100 From: Goswin von Brederlow To: Daniel de Rauglaudre Cc: caml-list@inria.fr Subject: Re: [Caml-list] MLbrot: Mandelbrot Set in OCaml References: <20101108150313.GA11054@yquem.inria.fr> <698193382.354372.1289232453372.JavaMail.root@zmbs3.inria.fr> <20101109110211.GA32550@yquem.inria.fr> Date: Wed, 10 Nov 2010 00:56:55 +0100 In-Reply-To: <20101109110211.GA32550@yquem.inria.fr> (Daniel de Rauglaudre's message of "Tue, 9 Nov 2010 12:02:11 +0100") Message-ID: <87pqueuk3c.fsf@frosties.localnet> User-Agent: Gnus/5.110009 (No Gnus v0.9) XEmacs/21.4.22 (linux, no MULE) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: goswin-v-b@web.de X-Sender: goswin-v-b@web.de X-Provags-ID: V01U2FsdGVkX1+VVOfyzHXjHPp8EoEC8O+KWQA+IJSgLgmF/5jD Ks/1P/aJ2f+PeWwviDhf9mqDVZwZteIEx8tqgYFN8hCFBooF10 IJTpzBy8E= X-Spam: no; 0.00; ocaml:01 rauglaudre:01 rauglaudre:01 0100,:01 recenter:01 'x':01 'x':01 computed:01 uniformly:01 computed:01 iteration:01 iterated:01 iteration:01 ocaml:01 gtk:01 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 :-) 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. >> 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! MfG Goswin