我正在研究逃逸时间分形作为我的12年级项目,用C++编写,使用简单的graphics.h库已经过时但似乎足够了。 生成Mandelbrot集合的代码似乎有效,我假定Julia集合将是相同的变体。下面是代码: (这里,fx和fy是简单地起到将实际复杂坐标等(-0.003,0.05)转换为屏幕上的像素的实际值)Julia设置渲染代码
int p;
x0=0, y0=0;
long double r, i;
cout<<"Enter c"<<endl;
cin>>r>>i;
for(int i= fx(-2); i<=fx(2); i++)
{
for(int j= fy(-2); j>=fy(2); j--)
{
long double x=0.0, y= 0.0,t;
x= gx(i), y= gy(j);
int k= -1;
while((x*x + y*y <4)&& k<it-1)
{
t= x*x - y*y + r;
y= 2*x*y + i ;
x=t;
k++;
}
p= k*pd;
setcolor(COLOR(colour[p][0],colour[p][1],colour[p][2]));
putpixel(i,j,getcolor());
}
}
但这似乎并非如此。输出窗口显示半径= 2的整个圆,其颜色对应于1次迭代的逸出时间。
此外,在试图寻找一个解决这个问题,我已经看到了所有的算法其他人使用有点初始化初始坐标如下:
x = (col - width/2)*4.0/width;
y = (row - height/2)*4.0/width;
有人能解释一下我错过了吗?
你有一个Mandelbrot发电机吗?将其修改为Julia涉及将变量更改为常量。如果你减少了循环变量,这个'(int j = fy(-2); j> = fy(2); j - )'循环如何?这会表明'fy(-2)'大于'fy(2)'。 – karatedog
@karatedog否,在BGI窗口中,(0.0)是左上角,(宽度,高度)是右下角。所以要从y = -2到y = +2,你必须减少j的值。是的,我有一个Mandelbrot集合发电机。 –
'it'的价值是什么?我建议通常,当你正在调试模拟每一个输入数据,并使用常量值而不是变量(比如用50代替'it') – karatedog