Я бездельничаю с некоторыми наборами Mandlebrot, потому что я думаю, что изображения, которые это производит, симпатичны. Я подумал, что мог бы попытаться решить проблему рисования в javascript, чтобы увидеть, что я могу сделать. Я посмотрел на пару алгоритмов, а именно:
http://library.thinkquest.org/26242/full/progs/a2.html
Который я перевел на это:
drawGraph: function(canvas,resolution,iterations,colors,coefficent){
var context = canvas.getContext('2d');
for(var m = 0; m < resolution.x; m++){
for(var n = 0; n < resolution.y; n++){
var x = m,
x2 = x*x,
y = n,
y2 = y*y;
var i;
for(i = 1; i < iterations; i++){
if(x2 + y2 > 4) break;
var new_x = x2 - y2 + coefficent.a;
var new_y = 2*x*y + coefficent.b;
x = new_x;
y = new_y;
}
var color = i % colors;
DrawUtils.drawPoint(context,m,n,color);
}
}
}
Который по существу рисует прямоугольник одного цвета.
Тогда я попробовал это:
http://en.wikipedia.org/wiki/Mandelbrot_set#Escape_time_algorithm
Который я перевел на это:
drawGraph: function(canvas,resolution,iterations,colors,coefficent){
var context = canvas.getContext('2d');
for(var m = 0; m < resolution.x; m++){
for(var n = 0; n < resolution.y; n++){
var x = 0,
y = 0,
x0 = ((m/resolution.x) * 3.5) - 2.5,
y0 = ((n/resolution.y) * 2) - 1;
var i = 0;
while(x*x + y*y < 4 && i < iterations){
var x_temp = x*x - y*y + x0;
y = 2*x*y + y0;
x = x_temp;
i++;
}
var color = 0;
if(x*x + y*y >= 4){
color = i % colors;
}
DrawUtils.drawPoint(context,m,n,color);
}
}
}
Который производит черный ящик. Формулировка в алгоритме как-то меня смутила, поскольку в нем сказано, что масштабированные x0 и y0 являются факторами пикселя, но затем, после алгоритма, он говорит, что коэффициент c = x0 + iy0; итак, значит ли это, что я не передаю заранее заданный коэффициент в функцию?
Для большинства этих тестов я использовал коэффициент 0,25 + 0i, но я пробовал другие, которые давали точно такие же результаты.
Что я здесь не так делаю?