Added Mandelbrot visualisation to index page.
authorEugen Sawin <sawine@me73.com>
Sun, 04 Jul 2010 00:11:17 +0200
changeset 7cfde0597a8dc
parent 6 d33f0b00f8d9
child 8 b1a67cf82daf
Added Mandelbrot visualisation to index page.
factory/frame.html
factory/v2010/index.html
script.js
     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 +}