Delphi 上 Mandelbrot 集的平滑着色算法

发布于 2024-12-02 18:45:30 字数 665 浏览 3 评论 0原文

我在使用平滑着色算法时遇到问题。我只是没有在我的代码中实现它们。 这是在计算一些像素行后导致错误的主要代码:

g:=StrToInt(Edit3.Text); //maximum iteration count
for x:=0 to Width do
begin
  for y:=0 to Height do
  begin
    zr:=x*(br-ar)/Width+ar;
    zi:=y*(bi-ai)/Height+ai;
    n:=1;
    zr0:=zr;
    zi0:=zi;
    while (n<g) and (zr*zr+zi*zi<4) do                                      
    begin
      zrh:=zr;
      zr:=zr*zr-zi*zi+zr0;
      zi:=zrh*zi+zi*zrh+zi0;
      Inc(n) //iterations
    end;
    n:=Round(n+1-(log2(log2(sqrt(zr*zr+zi*zi))/log2(4)))); //<-- this should smoothen the iterations
    Draw_Pixels(n,g,x,y,Image1.Canvas)
    end
  end;
end;

Henry

I have problems using the smooth coloring algorithm. I just don't get them implemented in my Code.
This is the main code which causes an error after some calculated pixel rows:

g:=StrToInt(Edit3.Text); //maximum iteration count
for x:=0 to Width do
begin
  for y:=0 to Height do
  begin
    zr:=x*(br-ar)/Width+ar;
    zi:=y*(bi-ai)/Height+ai;
    n:=1;
    zr0:=zr;
    zi0:=zi;
    while (n<g) and (zr*zr+zi*zi<4) do                                      
    begin
      zrh:=zr;
      zr:=zr*zr-zi*zi+zr0;
      zi:=zrh*zi+zi*zrh+zi0;
      Inc(n) //iterations
    end;
    n:=Round(n+1-(log2(log2(sqrt(zr*zr+zi*zi))/log2(4)))); //<-- this should smoothen the iterations
    Draw_Pixels(n,g,x,y,Image1.Canvas)
    end
  end;
end;

Henry

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷途知返 2024-12-09 18:45:30

如果您最终得到 zr == zi == 0,您将尝试采用未定义的 log2(0) (-inf 作为限制)。

如果 zr*zr+zi*zi 等于或小于 1,则内部 log2 将返回 0 或负值,这将破坏外部 log2(只要处理实数就不能取负数的对数)。

(而且我认为对于稍微超过 1 的 zr*zr+zi*zi 值来说,这不会平滑地缩放。)

If you ever end up with zr == zi == 0, you'll be trying to take log2(0), which is not defined (-inf as a limit).

If zr*zr+zi*zi is ever equal to or less than one, the inner log2 will return 0 or a negative value, which will break the outer log2 (can't take the log of a negative number as long as you're dealing with reals).

(And I don't think that will scale smoothly for values of zr*zr+zi*zi slightly over 1.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文