3 <title>Canvas Xaoc Client</title>
4 <script type="text/javascript">
5 function Complex(real, imag)
11 var MIN_C = new Complex(-2.2, -1.4);
12 var MAX_C = new Complex(1.0, 1.4);
18 function Result(z, iter)
24 function complex_quad(c)
26 return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2),
27 2.0 * c.real * c.imag);
30 function complex_quad_value(c)
32 return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
35 function complex_add(c1, c2)
37 return new Complex(c1.real + c2.real, c1.imag + c2.imag);
40 function iterate(z, c)
42 z_quad = complex_quad(z);
43 return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
46 function test(c, max_iter)
49 var z = new Complex(0.0, 0.0);
50 while (complex_quad_value(z) <= 4.0
56 return new Result(z, iter);
59 function draw(iter, x, y, z)
61 var canvas = document.getElementById('mandelbrot');
62 if (canvas.getContext){
63 var ctx = canvas.getContext('2d');
67 var min_inc = new Complex(x + zoom, y + zoom);
68 var max_inc = new Complex(x - zoom, y - zoom);
69 min_c = complex_add(min_c, min_inc);
70 max_c = complex_add(max_c, max_inc);
72 var diff_c = new Complex(max_c.real - min_c.real,
73 max_c.imag - min_c.imag);
74 var width = canvas.width;
75 var height = canvas.height;
76 var dim = Math.max(width, height);
77 ctx.clearRect(0, 0, width, height);
79 for (var y = 0; y < height; y++)
81 for (var x = 0; x < width; x++)
85 var c = new Complex(min_c.real + diff_c.real
87 min_c.imag + diff_c.imag / dim * y);
88 var result = test(c, max_iter);
90 if (result.iter < max_iter)
92 var r = result.iter * 3;
93 var g = result.iter * 3;
94 var b = result.iter * 3;
95 var colour = r + "," + g + "," + b;
96 ctx.fillStyle = "rgb(" + colour + ")";
97 ctx.fillRect(x, y, 1, 1);
105 <style type="text/css">
106 canvas { border: 0px solid black; }
107 body { background: black; }
110 <body onload="draw(0, 0, 0, 0);">
111 <canvas id="mandelbrot" width="800" height="400"></canvas>
112 <form action="canvas_client.html" method="post">
113 <input type="button" value="left"
114 onclick="draw(0, -1, 0, 0);">
115 <input type="button" value="right"
116 onclick="draw(0, 1, 0, 0);">
117 <input type="button" value="up"
118 onclick="draw(0, 0, -1, 0);">
119 <input type="button" value="down"
120 onclick="draw(0, 0, 1, 0);">
121 <input type="button" value="in"
122 onclick="draw(10, 0, 0, 1);">
123 <input type="button" value="out"
124 onclick="draw(-10, 0, 0, -1);">