script.js
changeset 7 cfde0597a8dc
parent 0 d9b71931f372
child 10 9460588a1633
     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 +}