我在摆弄一些 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,但我尝试了其他产生完全相同结果的测试。
我在这里做错了什么?