【发布时间】:2015-11-29 00:48:41
【问题描述】:
我正在研究逃逸时间分形作为我的 12 年级项目,用 c++ 编写,使用已过时但似乎足够的简单 graphics.h 库。 生成 Mandelbrot 集的代码似乎有效,我假设 Julia 集是相同的变体。这是代码: (这里,fx 和 fy 只是将实际复杂坐标(如 (-0.003,0.05))转换为屏幕上像素的实际值的简单函数。)
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 不,在 BGI 窗口中,(0.0) 是左上角,(width, height) 是右下角。所以从 y= -2 到 y= +2,你必须减少 j 的值。是的,我有一个可以工作的 Mandelbrot 集合生成器。
-
it的值是多少?我建议通常,当您调试模拟每个输入数据并使用常量值而不是变量时(例如将it替换为 50) -
@karatedog ,
it是用户输入的任何值,从 1 到 1275 的任意位置。我有一个 1275 种颜色的数组 [需要改进,但现在可以正常工作 [the曼德布罗集] ] . -
如果你有一个有效的 Mandlebrot 集,然后在迭代中修改这部分:
z = z^2 + c到z = z^2 + <constant>,你就完成了。我在这里有一个不同问题的答案(但你会明白的):stackoverflow.com/a/29984188/216248
标签: c++ iteration complex-numbers fractals