67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
function Mandeliter(cx, cy, maxiter)
|
|
{
|
|
var i;
|
|
var x = 0.0;
|
|
var y = 0.0;
|
|
for (i = 0; i < maxiter && x*x + y*y <= 4; ++i)
|
|
{
|
|
var tmp = 2*x*y;
|
|
x = x*x - y*y + cx;
|
|
y = tmp + cy;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
function Mandelbrot()
|
|
{
|
|
var width = 900;
|
|
var height = 600;
|
|
var cd = document.getElementById('calcdata');
|
|
var xmin = parseFloat(cd.xmin.value);
|
|
var xmax = parseFloat(cd.xmax.value);
|
|
var ymin = parseFloat(cd.ymin.value);
|
|
var ymax = parseFloat(cd.ymax.value);
|
|
var iterations = parseInt(cd.iterations.value);
|
|
var ctx = document.getElementById('mandelimage').getContext("2d");
|
|
var img = ctx.getImageData(0, 0, width, height);
|
|
var pix = img.data;
|
|
for (var ix = 0; ix < width; ++ix)
|
|
for (var iy = 0; iy < height; ++iy)
|
|
{
|
|
var x = xmin + (xmax-xmin)*ix/(width-1);
|
|
var y = ymin + (ymax-ymin)*iy/(height-1);
|
|
var i = Mandeliter(x, y, iterations);
|
|
var ppos = 4*(900*iy + ix);
|
|
if (i == iterations)
|
|
{
|
|
pix[ppos] = 0;
|
|
pix[ppos+1] = 0;
|
|
pix[ppos+2] = 0;
|
|
}
|
|
else
|
|
{
|
|
var c = 3*Math.log(i)/Math.log(iterations - 1.0);
|
|
if (c < 1)
|
|
{
|
|
pix[ppos] = 255*c;
|
|
pix[ppos+1] = 0;
|
|
pix[ppos+2] = 0;
|
|
}
|
|
else if (c < 2)
|
|
{
|
|
pix[ppos] = 255;
|
|
pix[ppos+1] = 255*(c-1);
|
|
pix[ppos+2] = 0;
|
|
}
|
|
else
|
|
{
|
|
pix[ppos] = 255;
|
|
pix[ppos+1] = 255;
|
|
pix[ppos+2] = 255*(c-2);
|
|
}
|
|
}
|
|
pix[ppos+3] = 255;
|
|
}
|
|
ctx.putImageData(img,0,0);
|
|
}
|