1

私は C++ でのプログラミングにかなり慣れていないので、改善するためにマンデルブロー セットのコンソール アプリケーションを作成しようとしています。ほぼ完璧に動作するようになりました。画像が生成され、ズームイン/ズームアウトし、非常に簡単に移動できます。ただし、私が抱えている問題は、画像の端にズームインし始めると、端が「切り取られ」始めることです。

ズームアウトした画像:

http://i.imgur.com/Fy70o.png

少し拡大した画像 - ご覧のとおり、最後の「円」の半分が切り落とされています。

http://i.imgur.com/1nlVP.png

最後に、ズームインすると、最後の「円」全体が完全に切り取られています。

http://i.imgur.com/lao8j.png

ズームインし続けると、大きな円のエッジも切り刻まれ始めます。なぜこれが起こっているのか完全にはわかりませんが、ズーム方法が何らかの原因であると思います。

アルゴリズム計算関数のソースコードは次のとおりです(エラーがあると推測しています):

int fractalCalc(double x0, double y0, double zoom)
{
    double x = 0;
    double y = 0;

    int iteration = 0;
    int max_iteration = 1000; //1000

    double xtemp;
    while (x*x + y*y < 2*2 && iteration < max_iteration) //x*x + y*y < 2*2 && iteration < max_iteration
    {
        xtemp = x*x - y*y + x0;
        y = 2*x*y + y0;
        y /= zoom;
        x = xtemp;
        x /= zoom;
        iteration++;
    }


    return iteration;
}

ソース コード全体については、次の URL にアクセスしてください (私の予測は間違っている可能性が高いため): http://pastebin.com/WhbS0WYE

任意の提案および/または支援を歓迎します。前もって感謝します!

4

1 に答える 1

3

厳密には計算していませんが、ズームの扱い方が原因だと思います。実際のマンデルブロ深度計算を処理するコードでは実行しないことをお勧めします。

代わりに、ズームを使用して、サンプルを選択する「ビューポート」を選択します。サンプリングする座標を決定し、fractalCalc関数を記述して特定のポイントの深さを計算しますその関数は、表示しているものについて何も知る必要はありません。

他のことは別として、この懸念事項 (ビューポートとフラクタル部分) の分離により、推論とデバッグが容易になります。また、反復ごとの計算が少なくなるため、浮動小数点の不正確さが少なくなります。

于 2012-10-20T08:27:58.723 に答える