我使用smoot着色算法时遇到问题。我只是没有在我的代码中实现它们。 这是在一些计算出的像素行之后导致错误的主要代码:
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;
亨利
答案 0 :(得分:3)
如果您最终得到zr == zi == 0
,则会尝试使用未定义的log2(0)
(-inf
作为限制)。
如果zr*zr+zi*zi
等于或小于1,内部log2
将返回0或负值,这将打破外部log2
(无法记录日志只要你正在处理实数,就会出现负数。
(我不认为zr*zr+zi*zi
的值会略微超过1而能够平滑扩展。)