Delphi 上 Mandelbrot 集的平滑着色算法

问题描述 投票:0回答:1

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

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;

亨利

delphi colors smoothing mandelbrot
1个回答
3
投票

如果您最终得到

zr == zi == 0
,您将尝试采用
log2(0)
,这是未定义的(
-inf
作为限制)。

如果

zr*zr+zi*zi
等于或小于1,内部
log2
将返回0或负值,这将破坏外部
log2
(只要你正在处理实数)。

(而且我认为对于略大于 1 的

zr*zr+zi*zi
值,这不会平滑缩放。)

© www.soinside.com 2019 - 2024. All rights reserved.