HomeBlogThe Bazon Fractal

The Bazon Fractal

Here is a JavaScript implementation (using the <canvas> element) of an idea that my father discovered like 20 years ago. (It was published in his book “Limbaje şi calculator”, ed. Petrion, Bucureşti 1998 - ISBN 973-9116-45-0). To the best of our knowledge, the idea wasn't known at the time. We recently found a similar image in Knuth's “The Art of Programming”, vol. 4, which according to Wikipedia was not published until 2005. Hence, in lack of a better name, I'm going to call this “the Bazon fractal”.

The idea is simple. To draw the pixel (x, y) of the image, you compute some function of x and y, and select a color based on the returned value. Certain functions lead to impressive results. But you need to be either too lucky, or a passionate mathematician, to discover a function that outputs something meaningful.

Look for instance at the following (and check the source of the page to see how it's done):

That's pretty much how it looked 20 years back, on our ZX Spectrum where you didn't have the luxury of putting more than two colors in an 8x8 pixels square. So it was monochrome. Luckily for us, on today hardware we do have the option, so let's try it:

The above just uses an array of 32 shades of grey, from plain black to white. It still has some rough edges, so I figured out that it would be cool to do some kind of "antialiasing". How to do that? Well, we can use a 64 colors array, which has black at the extremes and white at the middle. Go figure:

You can generate interesting variations by slightly changing the function or a few coefficients. Try it below. For instance if you change the last minus to plus, you get the circles above.

Predefined functions:
Mod =

In the code below you can use x, y, width, height and mod variables, and you need to return some value between 0 and mod. The abs function is a helper for negative values (it's not exactly the same as Math.abs).



Note that animation will probably suck unless your browser is Chrome. It's quite slow with Firefox, and I didn't test with anything else. With Chrome it works fine. The animation function simply increases the Mod value then redraws.

Comments

  • By: altblueMay 24 (03:27) 2010RE: The Bazon Fractal §

    M-ai făcut curios dacă e chiar atât de lent în Firefox*. Este :(
    Ok, dar de ce?! Profiling... brrr, păi dacă chiar și „banala” funcție „abs”** rulează de 6 ori mai lent***... :((
    Eh, hai totuși să zic că overall e de 3-4 ori mai lent :(

    * Google Chrome 6.0.408.1 vs Mozilla Firefox 3.6.3, ambele pe 64b;
    **„abs” a luat 15.08% din timp dacă e să ne luăm după Firebug 1.5.4;
    *** Chrome: ~18M/s, Firefox: ~3M/s. E irelevantă o diferențiere „pe plus/minus”.

    În orice caz, se lucrează și pe la Mozilla, dacă e să testezi și cu o versiune „beta” de-a lor :^)
    Astfel, pe „3.6.4-build4” (Gecko/20100513 pe 32b), situația se schimbă drastic, „abs” rulează „pe plus” la 54M/s, iar „pe minus” la 32M. :))

    Overall se întâmplă ceva „bizar” (adică „normal” dacă ne amintim că vorbim totuși despre Mozilla): per iterație acum balanța se înclină spre Firefox (~25%), însă devine din ce în ce mai lent, probabil iar curg ceva țevi. ;-)
    Heh, e bine totuși că se lucrează :)

    • By: altblueMay 24 (03:47) 2010RE[2]: The Bazon Fractal §

      BS, îmi suna prea fals diferența dintre „stabilă” și „beta” la Firefox, așa că am luat și versiunea lor „stabilă” (3.6.3, Gecko/20100401 pe 32b) și am repetat testele: nu avea Mozilla nici o vină, 3.6.3 se mișcă (aproape) la fel de repede ca și 3.6.4. :)
      Deci ce ziceam mai devreme despre „beta” e valabil de fapt și pe „stabilă”, inclusiv degradarea după repetare.

      Mdeah, naiba m-a pus să testez cu build făcut de vendor în loc să am încredere în ce propovăduiește baba Mozilla!? o;-)
      Eh, las' că poate reușesc totuși să se țină de cuvânt^Wintenție și să pornească și cu versiunea oficială pe 64b încă de la 4.0.

      • By: mishooMay 24 (08:20) 2010RE[3]: The Bazon Fractal §

        Ah, ai dreptate cu 3.6.3.  Eu încă sunt cu FF 3.5.x din Ubuntu, iar asta chiar e s-l-o-w.  3.6.3 e comparabil cu Chrome, dar exact cum spui -- după primele câteva secunde, care sunt smooth, începe să obosească şi trece la ~1 fps.

  • By: Lorenzo GattiSep 23 (13:56) 2011RE: The Bazon Fractal §

    This kind of figure was featured in one of the computer recreations columns in Scientific American. I think it's by A.K. Dewdney and from the '80s; it might be collected in "The Armchair Universe"

Page info
Created:
2010/05/23 19:05
Modified:
2010/05/25 00:00
Author:
Mihai Bazon
Comments:
4
Tags:
javascript, programming
See also