1.1 --- a/script.js Sat Jun 19 00:12:34 2010 +0200
1.2 +++ b/script.js Sun Jul 04 00:11:17 2010 +0200
1.3 @@ -137,3 +137,105 @@
1.4 //document.write(request.responseText);
1.5 document.getElementById('footer').innerHTML = request.responseText;
1.6 }
1.7 +
1.8 +// Mandelbrot functions
1.9 +function Complex(real, imag)
1.10 +{
1.11 + this.real = real;
1.12 + this.imag = imag;
1.13 +}
1.14 +
1.15 +var MIN_C = new Complex(-2.2, -1.4);
1.16 +var MAX_C = new Complex(1.0, 1.4);
1.17 +var min_c = MIN_C;
1.18 +var max_c = MAX_C;
1.19 +var max_iter = 100;
1.20 +var zoom = 0.1;
1.21 +
1.22 +function Result(z, iter)
1.23 +{
1.24 + this.z = z;
1.25 + this.iter = iter;
1.26 +}
1.27 +
1.28 +function complex_quad(c)
1.29 +{
1.30 + return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2),
1.31 + 2.0 * c.real * c.imag);
1.32 +}
1.33 +
1.34 +function complex_quad_value(c)
1.35 +{
1.36 + return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
1.37 +}
1.38 +
1.39 +function complex_add(c1, c2)
1.40 +{
1.41 + return new Complex(c1.real + c2.real, c1.imag + c2.imag);
1.42 +}
1.43 +
1.44 +function iterate(z, c)
1.45 +{
1.46 + z_quad = complex_quad(z);
1.47 + return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
1.48 +}
1.49 +
1.50 +function test(c, max_iter)
1.51 +{
1.52 + var iter = 0;
1.53 + var z = new Complex(0.0, 0.0);
1.54 + while (complex_quad_value(z) <= 4.0
1.55 + && iter < max_iter)
1.56 + {
1.57 + z = iterate(z, c);
1.58 + iter++;
1.59 + }
1.60 + return new Result(z, iter);
1.61 +}
1.62 +
1.63 +function draw(iter, x, y, z)
1.64 +{
1.65 + var canvas = document.getElementById('mandelbrot');
1.66 + if (canvas.getContext)
1.67 + {
1.68 + var ctx = canvas.getContext('2d');
1.69 + zoom += z / 10.0;
1.70 + x = x / 30.0 / zoom;
1.71 + y = y / 30.0 / zoom;
1.72 + var min_inc = new Complex(x + zoom, y + zoom);
1.73 + var max_inc = new Complex(x - zoom, y - zoom);
1.74 + min_c = complex_add(min_c, min_inc);
1.75 + max_c = complex_add(max_c, max_inc);
1.76 + max_iter += iter;
1.77 + var diff_c = new Complex(max_c.real - min_c.real,
1.78 + max_c.imag - min_c.imag);
1.79 + var width = canvas.width;
1.80 + var height = canvas.height;
1.81 + var dim = Math.max(width, height);
1.82 + ctx.clearRect(0, 0, width, height);
1.83 +
1.84 + for (var y = 0; y < height; y++)
1.85 + {
1.86 + for (var x = 0; x < width; x++)
1.87 + {
1.88 + if (true)
1.89 + {
1.90 + var c = new Complex(min_c.real + diff_c.real
1.91 + / dim * x,
1.92 + min_c.imag + diff_c.imag / dim * y);
1.93 + var result = test(c, max_iter);
1.94 +
1.95 + if (result.iter < max_iter)
1.96 + {
1.97 + var r = result.iter * 3;
1.98 + var g = result.iter * 3;
1.99 + var b = result.iter * 3;
1.100 + var colour = r + "," + g + "," + b;
1.101 + ctx.fillStyle = "rgb(" + colour + ")";
1.102 + ctx.fillRect(x, y, 1, 1);
1.103 + }
1.104 + }
1.105 + }
1.106 + }
1.107 + }
1.108 +}