Presentation is loading. Please wait.

Presentation is loading. Please wait.

Mandelbrot and Julian sets Vaclav Vavra. Definitions By both sets we compute the same sequence given by recursive formula: z n = (z n-1 ) 2 + c z n, z.

Similar presentations


Presentation on theme: "Mandelbrot and Julian sets Vaclav Vavra. Definitions By both sets we compute the same sequence given by recursive formula: z n = (z n-1 ) 2 + c z n, z."— Presentation transcript:

1 Mandelbrot and Julian sets Vaclav Vavra

2 Definitions By both sets we compute the same sequence given by recursive formula: z n = (z n-1 ) 2 + c z n, z n-1, c are complex numbers(!) Julian set is set of z 0 ’s for which the sequence does not diverge –(c is constant for a given Julian set) formally: J = C - {z 0 | z n = (z n-1 ) 2 + c → ∞} or J = {z 0 | ┐(z n = (z n-1 ) 2 + c → ∞)}

3 Definitions Mandelbrot set is set of c’s for which the sequence does not diverge for z 0 = 0 formally: J = C - {c|z 0 = 0, z n = (z n-1 ) 2 + c → ∞} or J = {c|z 0 = 0, ┐(z n = (z n-1 ) 2 + c → ∞)}

4 Operations in C Notation: x = a + b.i – a is real part, b is imaginary part, i is imaginary unit, i 2 =-1 Operations: y = c + d.i x + y = (a+c) + (b+d).i x.y = (ac−bd) + (bc+ad).i |x| = sqrt(a 2 + b 2 )

5 Visualisation for a given c, z 0 we compute z 1, z 2, z 3,…in a loop this way we cannot analytically determine, whether the sequence diverges However if |z n | > 2, it really diverges if |z n | is still <= 2, we just stop after fixed number of iterations It works

6 Julian set – sudocode const complex c = {c.r,c.i}; for (every real part for z 0 ) { //should be between -2 and 2 for (every imaginary part for z 0 ) { //should be between -2 and 2 z := z 0 ; for (fixed number of iterations) { //120 is ok z = z^2 + c; if (|z| > 2) break; // or |z|^2 > 4 } drawPixel(Re(z 0 ), Im(z 0 ), #iterations needed); }

7 Mandelbrot set – sudocode for (every real part for c) { //should be between -2 and 2 for (every imaginary part for c) { //should be between -2 and 2 z := c; //z 0 =0, therefore z 1 =c for (fixed number of iterations) { //40 is ok here z = z^2 + c; if (|z| > 2) break; // or |z|^2 > 4 } drawPixel(Re(z 0 ), Im(z 0 ), #iterations needed); }

8 Colors We map #iterations to colors Various ways how to do it Besides #iterations #maximum number of iterations (maxiter) We want to set values for r,g,b Maybe you want point inside the set to be black –If (#iterations == maxiter) r = b = g = 0; Examples: a) (r,g,b are floats from 0.0 to 1.0) r = 1-(1-#iterations/maxiter)^5; g = 1-(1-#iterations/maxiter)^3; b = #iterations/maxiter;

9 Colors b) (r,g,b are integers from 0 to 255) int colorTable[16][3] = { { 0, 0, 0}, { 0, 0,170}, { 0,170, 0}, { 0,170,170}, {170, 0, 0}, {170, 0,170}, {170, 85, 0}, {170,170,170}, { 85, 85, 85}, { 85, 85,255}, { 85,255, 85}, { 85,255,255}, {255, 85, 85}, {255, 85,255}, {255,255, 85}, {255,255,255}, }; r = colorTable[#iterations % 16][0]; g = colorTable[#iterations % 16][1]; b = colorTable[#iterations % 16][2]; You can find other examples at http://www.root.cz/clanky/fraktaly-v-pocitacove-grafice-xiv/

10 Tips and tricks colors: instead of mapping #iterations to colors, we can map z n (the last one before we leave the loop) to colors So now we have drawPixel(Re(z 0 ), Im(z 0 ), Re(z n ), Im(z n )); –We can use it for the inside if the set too!! Until now we get drawPixel(Re(z 0 ), Im(z 0 ),maxiter) there Mandelbrot set – if we set z 0 to a non-zero value, we get the set deformed –z 0 is then called the “perturbation” term Set the maximum number of iterations to a small number and we have the sets deformed, too (particularly useful for Mandelbrot set)

11

12

13

14

15

16

17 References http://www.root.cz/clanky/fraktaly-v-pocitacove-grafice-xiv http://www.cis.ksu.edu/~vaclav/fractals.html


Download ppt "Mandelbrot and Julian sets Vaclav Vavra. Definitions By both sets we compute the same sequence given by recursive formula: z n = (z n-1 ) 2 + c z n, z."

Similar presentations


Ads by Google