2016-10-16 13 views
1

私はスクリプトを使ってマンデルブロを描くことにしました。それを描くことはあまりにも複雑ではなかったので、私は色を使うことに決めました。そして、私は滑らかな着色アルゴリズムを発見しました。 this questionを使用して、私は何かを本当に美しくレンダリングできました。これはthis oneと似ています。pythonを使ってmandelbrotを設定するための色付けを正しく設定する方法は?

これを達成するために、3つの「ステップ」を使用してグラデーションカラーパレットを設定します。ダークブルーからライトブルー、ライトブルーからイエロー、そして最終的には黄色から暗褐色。全体像は完璧です。

ズームインしようとすると問題が発生します。this areaの例を考えてみましょう。私がズームのこのレベルにいるとき、私のスクリプトはもはやダークブルーを描きません。私はウィキペディアの画像で暗い青色が見えることがありますので、私はダークブラウン(私のパレットの終わり近くに色があります)を持っているので、私は何かをコーディングしたと思います。私が最初にこれについて考えたとき、パターンが元のパターンに戻っていれば、同じ色を使用してエスケープ時間を同じにする必要があります。

この色はパレットに設定されていたのですか、わからないエスケープ時間がありますか?ここで

は、私が着色に使用するコードです:

def color_pixel(n, z): 
    smoothcolor = n + 1 - math.log(math.log(abs(z)))/math.log(2) 
    f = smoothcolor/iterate_max 
    i = int(f*500) 
    color = palette[i] 
    return color 

500は私のパレット(len(palette)-1)の色数です。それは10上

を免れた場合、Zの値は、Iが最大反復回数より高い値と同じ結果として100を使用

Z。

ありがとうございます!

+0

あなたが表示するような小さな領域を拡大すると、領域内の最小反復はもはや1ではなくなり、カラー配列の下端の色は使用されなくなります。 OTOHをベースレベルで使用すると、配列の上端の色がほとんど使用されないため、それらの色に気付かないでください。あなたができることの1つは、画像をレンダリングする前に、リージョンの周りで最も低い反復を見つけて、それをオフセットとして使用することです。 –

+0

さらに多くのイテレーションがズームされるほど高くなるでしょうか? 色が元に戻るように、パレットのループを行う必要がありますか? – Lich4r

+0

そうです、低い反復は最初のスケール画像の端にしかないので、投稿された画像はそれをあなたに伝えます!実験をすると、ズームが深くなればなるほど、Mセットの近くのディテールを解決するための反復が必要になります*。 –

答えて

0

私の着色方法は、回転アレイを3つのセクションで使用することです。最初の青は、赤を使用しないで緑にクロスフェードし、次に青を使用せずに緑から赤に変わり、最後に赤で緑を使わずに青に変わります。次の反復レベルは、反復のモジュラス

しかし、私はおそらく平滑化したリアルタイムのズーム(2倍のスケールでデータを格納し、再生のために16フレームの補間を行っています)を行ったところ、Mセットの近傍では輪郭が混沌として見えますが、色が踊る傾向があるため、効果は乱雑でした。そこでは、色をグレースケールに曲げる別のスキームを使用しました。

私の最終的な着色方法は、同じ深さの一つ以上の近隣の画素のための回転パレットを使用することであったが、多くの隣人が異なっていた方法に応じて、中間灰色に向かう傾向があります。しかし、動画の要件は静止画像とは異なり、シャープなディテールが必ずしも望ましいとは限りません。

ディープズームでは、ディテールを抽出するために必要な反復回数は1000回以上になることがあります。私は横に問題を解決しました。私はマップの計算をブルートフォースしていません。私は反復レベルの輪郭に沿って曲線を描く方法を開発し、その領域を塗りつぶしました。スムーズに変化する領域では、広い領域を反復する必要はありません。同様に、関数がエスケープしていないM-Set自体についても、できるだけそのエッジをたどって、次にフィリングを試みることによって、できる限り反復するのを避けます。この方法は細かい部分を挟み込むことができますが、速度の向上は莫大です。 M-Setの端にある混沌とした領域では、私の方法はすべてのピクセルを反復することでした。

関連する問題