gpt4 book ai didi

c# - 绘制函数中的 mandelbrot 分形误差

转载 作者:太空宇宙 更新时间:2023-11-03 10:27:13 25 4
gpt4 key购买 nike

大家好,我正在尝试绘制 mandlebrot 分形,但结果与它相去甚远,你能帮我找出原因吗?

代码如下:

void Button1Click(object sender, EventArgs e)
{
Graphics g = pbx.CreateGraphics();
Pen p = new Pen(Color.Black);

double xmin = -2.0;
double ymin = -1.2;
double xmax = 0;
double ymax = 0;
double x = xmin, y = ymin;
int MAX = 1000;

double stepY = Math.Abs(ymin - ymax)/(pbx.Height);
double stepX = Math.Abs(xmin - xmax)/(pbx.Width);

for(int i = 0; i < pbx.Width; i++)
{
y = ymin;
for(int j = 0; j < pbx.Height; j++)
{
double rez = x;
double imz = y;
int iter = 0;

while(rez * rez + imz * imz <= 4 && iter < MAX)
{
rez = rez * rez - imz * imz + x;
imz = 2 * rez * imz + y;
iter++;
}
if(iter == MAX)
{
p.Color = Color.Black;
g.DrawRectangle(p, i, j, 1, 1);
}
else
{
p.Color = Color.White;
g.DrawRectangle(p, i, j, 1, 1);
}
y += stepY;
}
x += stepX;
}
}

请帮助我,我正在思考如何获得漂亮的曼德尔布罗套装……对不起,如果我犯了一些错误,但英语不是我的母语!

最佳答案

您在其他地方有一些违规行为。您绘制的范围不是整个集合,我会直接为每个像素计算 xy,而不是使用增量(以避免舍入误差积累)。

但在我看来,您的主要错误似乎在于迭代计算。在计算新的 imz 值之前,您正在修改 rez 变量。您的循环应该更像这样:

while(rez * rez + imz * imz <= 4 && iter < MAX)
{
double rT = rez * rez - imz * imz + x;

imz = 2 * rez * imz + y;
rez = rT;
iter++;
}

关于c# - 绘制函数中的 mandelbrot 分形误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31309069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com