OpenGLでマンデルブロ集合を視覚化しようとしていますが、滑らかな色付けに関しては非常に奇妙な動作を見つけました。
現在の複素数値について、 2を超えることが証明されたときに、反復C
後にアルゴリズムがエスケープされたと仮定します。n
Z
私はこのように着色部分をプログラムしました:
if(n==maxIterations){
color=0.0; //0.0 is black in OpenGL when put to each channel of RGB
//Points in M-brot set are colored black.
} else {
color = (n + 1 - log(log(abs(Z)))/log(2.0) )/maxIterations;
//continuous coloring algorithm, color is between 0.0 and 1.0
//Points outside M-brot set are colored depending of their absolute value,
//from brightest near the edge of set to darkest far away from set.
}
glColor3f(color ,color ,color );
//OpenGL-command for making RGB-color from three channel values.
問題は、これはうまく機能しないということです。若干のスムージングは目立ちますが、完璧ではありません。
しかし、2つの反復を追加すると(説明なしでこれがどこかに見つかりました)
Z=Z*Z+C;
n++;
色を計算する前の「else」ブランチでは、画像は完全に優雅に滑らかになります。
なぜこれが起こるのですか?セット内のポイントを確認した後、着色部分に追加の反復を配置する必要があるのはなぜですか?