Upload
isaac-holt
View
217
Download
0
Embed Size (px)
DESCRIPTION
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 → ∞)}
Citation preview
Mandelbrot and Julian sets
Vaclav Vavra
Definitions • By both sets we compute the same sequence
given by recursive formula:zn = (zn-1)2 + c
• zn , zn-1, c are complex numbers(!)
• Julian set is set of z0’s for which the sequence does not diverge – (c is constant for a given Julian set)
• formally: J = C - {z0| zn = (zn-1)2 + c → ∞} or J = {z0| ┐(zn = (zn-1)2 + c → ∞)}
Definitions
• Mandelbrot set is set of c’s for which the sequence does not diverge for z0 = 0
• formally: J = C - {c|z0 = 0, zn = (zn-1)2 + c → ∞} or
J = {c|z0 = 0, ┐(zn = (zn-1)2 + c → ∞)}
Operations in C
• Notation:x = a + b.i – a is real part, b is imaginary part, i is
imaginary unit, i2=-1• Operations:
y = c + d.i x + y = (a+c) + (b+d).ix.y = (ac−bd) + (bc+ad).i |x| = sqrt(a2 + b2)
Visualisation
• for a given c, z0 we compute z1, z2, z3,…in a loop
• this way we cannot analytically determine, whether the sequence diverges
• However if |zn| > 2, it really diverges
• if |zn| is still <= 2, we just stop after fixed number of iterations
• It works
Julian set – sudocode
const complex c = {c.r,c.i};
for (every real part for z0) { //should be between -2 and 2for (every imaginary part for z0) { //should be between -2 and 2
z := z0 ; for (fixed number of iterations) { //120 is ok z = z^2 + c; if (|z| > 2) break; // or |z|^2 > 4 }
drawPixel(Re(z0), Im(z0), #iterations needed);}
}
Mandelbrot set – sudocode
for (every real part for c) { //should be between -2 and 2for (every imaginary part for c) { //should be between -2 and 2
z := c; //z0=0, therefore z1=c
for (fixed number of iterations) { //40 is ok here z = z^2 + c; if (|z| > 2) break; // or |z|^2 > 4
}
drawPixel(Re(z0), Im(z0), #iterations needed);}
}
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;
Colorsb) (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/
Tips and tricks• colors: instead of mapping #iterations to colors, we can
map zn (the last one before we leave the loop) to colors• So now we have
drawPixel(Re(z0), Im(z0), Re(zn), Im(zn));– We can use it for the inside if the set too!!
• Until now we get drawPixel(Re(z0), Im(z0),maxiter) there
• Mandelbrot set – if we set z0 to a non-zero value, we get the set deformed – z0 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)
References• http://www.root.cz/clanky/fraktaly-v-pocitacove-grafice-xiv• http://www.cis.ksu.edu/~vaclav/fractals.html