Added Mandelbrot visualisation to index page.
1.1 --- a/factory/frame.html Sat Jun 19 00:12:34 2010 +0200
1.2 +++ b/factory/frame.html Sun Jul 04 00:11:17 2010 +0200
1.3 @@ -11,7 +11,7 @@
1.4 <link rel="stylesheet" href="dark.css" type="text/css" />
1.5 </head>
1.6
1.7 -<body>
1.8 +<body onload="draw(0, 0, 0, 0);">
1.9 <div id="wrap">
1.10 <div id="header">
1.11 <h1 id="logo-text"><a href="index.html" title="">ME73</a></h1>
2.1 --- a/factory/v2010/index.html Sat Jun 19 00:12:34 2010 +0200
2.2 +++ b/factory/v2010/index.html Sun Jul 04 00:11:17 2010 +0200
2.3 @@ -1,2 +1,7 @@
2.4 -<p><img src="images/world.png" alt="world map" height="280" width="100%" /></p>
2.5 +<p>
2.6 +<!--<img src="images/world.png" alt="world map" height="280" width="100%" />
2.7 +-->
2.8 +<body onload="draw(0, 0, 0, 0);">
2.9 +<canvas id="mandelbrot" width="670" height="280"></canvas>
2.10 +</p>
2.11
3.1 --- a/script.js Sat Jun 19 00:12:34 2010 +0200
3.2 +++ b/script.js Sun Jul 04 00:11:17 2010 +0200
3.3 @@ -137,3 +137,105 @@
3.4 //document.write(request.responseText);
3.5 document.getElementById('footer').innerHTML = request.responseText;
3.6 }
3.7 +
3.8 +// Mandelbrot functions
3.9 +function Complex(real, imag)
3.10 +{
3.11 + this.real = real;
3.12 + this.imag = imag;
3.13 +}
3.14 +
3.15 +var MIN_C = new Complex(-2.2, -1.4);
3.16 +var MAX_C = new Complex(1.0, 1.4);
3.17 +var min_c = MIN_C;
3.18 +var max_c = MAX_C;
3.19 +var max_iter = 100;
3.20 +var zoom = 0.1;
3.21 +
3.22 +function Result(z, iter)
3.23 +{
3.24 + this.z = z;
3.25 + this.iter = iter;
3.26 +}
3.27 +
3.28 +function complex_quad(c)
3.29 +{
3.30 + return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2),
3.31 + 2.0 * c.real * c.imag);
3.32 +}
3.33 +
3.34 +function complex_quad_value(c)
3.35 +{
3.36 + return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
3.37 +}
3.38 +
3.39 +function complex_add(c1, c2)
3.40 +{
3.41 + return new Complex(c1.real + c2.real, c1.imag + c2.imag);
3.42 +}
3.43 +
3.44 +function iterate(z, c)
3.45 +{
3.46 + z_quad = complex_quad(z);
3.47 + return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
3.48 +}
3.49 +
3.50 +function test(c, max_iter)
3.51 +{
3.52 + var iter = 0;
3.53 + var z = new Complex(0.0, 0.0);
3.54 + while (complex_quad_value(z) <= 4.0
3.55 + && iter < max_iter)
3.56 + {
3.57 + z = iterate(z, c);
3.58 + iter++;
3.59 + }
3.60 + return new Result(z, iter);
3.61 +}
3.62 +
3.63 +function draw(iter, x, y, z)
3.64 +{
3.65 + var canvas = document.getElementById('mandelbrot');
3.66 + if (canvas.getContext)
3.67 + {
3.68 + var ctx = canvas.getContext('2d');
3.69 + zoom += z / 10.0;
3.70 + x = x / 30.0 / zoom;
3.71 + y = y / 30.0 / zoom;
3.72 + var min_inc = new Complex(x + zoom, y + zoom);
3.73 + var max_inc = new Complex(x - zoom, y - zoom);
3.74 + min_c = complex_add(min_c, min_inc);
3.75 + max_c = complex_add(max_c, max_inc);
3.76 + max_iter += iter;
3.77 + var diff_c = new Complex(max_c.real - min_c.real,
3.78 + max_c.imag - min_c.imag);
3.79 + var width = canvas.width;
3.80 + var height = canvas.height;
3.81 + var dim = Math.max(width, height);
3.82 + ctx.clearRect(0, 0, width, height);
3.83 +
3.84 + for (var y = 0; y < height; y++)
3.85 + {
3.86 + for (var x = 0; x < width; x++)
3.87 + {
3.88 + if (true)
3.89 + {
3.90 + var c = new Complex(min_c.real + diff_c.real
3.91 + / dim * x,
3.92 + min_c.imag + diff_c.imag / dim * y);
3.93 + var result = test(c, max_iter);
3.94 +
3.95 + if (result.iter < max_iter)
3.96 + {
3.97 + var r = result.iter * 3;
3.98 + var g = result.iter * 3;
3.99 + var b = result.iter * 3;
3.100 + var colour = r + "," + g + "," + b;
3.101 + ctx.fillStyle = "rgb(" + colour + ")";
3.102 + ctx.fillRect(x, y, 1, 1);
3.103 + }
3.104 + }
3.105 + }
3.106 + }
3.107 + }
3.108 +}