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;

ヘンリー

4

1 に答える 1

3

で終わる場合は、(制限として)定義されていないzr == zi == 0を取得しようとします。log2(0)-inf

zr*zr+zi*ziが1以下の場合、内部はlog20または負の値を返し、外部を破壊しlog2ます(実数を処理している限り、負の数の対数を取ることはできません)。

zr*zr+zi*zi(そして、1をわずかに超える値に対してはスムーズにスケーリングされるとは思いません。)

于 2011-09-03T08:47:21.297 に答える