5

minReal から maxReal まで、および minImaginary から maxImaginary までのマンデルブロ集合の 400x400 画像を生成できます。そう、

makeMandel(minReal, maxReal, minImaginary, maxImaginary);

できるように変更する必要があります。

makeMandel(centerX, centerY, Zoomlevel);
// generates a region of the mandelbrot set centered at centerX,centerY at a zoom level of Zoomlevel

(ズーム レベルがピクセル間の距離を表し、ズーム レベル n = 2 ^ (-n) という式で与えられることを考慮すると、ズーム レベル 1 はピクセルが 0.5 単位離れていることを意味し、ズーム レベル 2、0.25 など.​​..)

私の質問は、2 番目の引数から最初の makeMandel 関数の引数を計算するにはどうすればよいですか? 最初の関数がズームと移動ができることは知っていますが、特定の中心とズーム レベルの正しい数値を計算する方法がわかりません。

私はこれを3日以上機能させようとしてきましたが、本当に混乱しています。紙に表などを描いてみたり、工夫したりしてみました。mandelbrot set を検索するときに Google で見つけたほとんどのドキュメントと、いくつかの過去の stackoverflow の質問を読みましたが、まだ理解できません。私を助けてください。

4

1 に答える 1

6

以下の方法で解決できます。2つの定義がある場合

centerX = (minReal + maxReal)/2
sizeX = maxReal - minReal

経由で軸の延長を計算できます

minReal = centerX - sizeX/2
maxReal = centerX + sizeX/2

サイズは次を使用して計算されますzoomLevel

sizeX = 2^(-zoomLevel) * baseSize

同じ式がy虚軸にも当てはまります。

sizeY = 2^(-zoomLevel) * baseSize   
minImaginary = centerY - sizeY/2
maxImaginary = centerY + sizeY/2

定数として定義する唯一のものは、 、つまりがゼロbaseSizeの場合の実軸と虚軸の拡張です。画像の非正方形の縦横比をカバーするために、実方向と虚方向がzoomLevel異なると考えることができます。baseSize

于 2011-04-16T12:13:23.197 に答える