Гладкий алгоритм раскраски для множества Мандельброта в Delphi - PullRequest
1 голос
/ 03 сентября 2011

У меня проблемы с использованием алгоритма сглаживания цвета. Я просто не реализую их в своем Кодексе. Это основной код, который вызывает ошибку после некоторых вычисленных строк пикселей:

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

1 Ответ

3 голосов
/ 03 сентября 2011

Если вы когда-нибудь получите zr == zi == 0, вы будете пытаться взять log2(0), который не определен (-inf как предел).

Если zr*zr+zi*zi всегда равенменьше или равный единице, внутреннее log2 вернет 0 или отрицательное значение, которое сломает внешнее log2 (не может записывать в журнал отрицательное число, пока вы имеете дело с реалами).

(И я не думаю, что оно будет плавно масштабироваться для значений zr*zr+zi*zi, немного превышающих 1.)

...