私は現在、マンデルブロ集合のレンダリングを実験していますが、レンダリングごとに最大反復回数を再計算する必要がないことが便利であることにすぐに気付きました...一方、追跡するには大量のデータが必要ですの。(RDMSでの限られた経験に基づくと)データセットが大きくなるにつれてパフォーマンスに影響を与えたくないので、リレーショナルデータベースはおそらく行く方法ではないように思われます。ハッシュテーブルにはほぼ完璧な状況のようですが、これまで使用したことがなく、既存のWebサーバー言語(Python / PHPなど)のいずれかでハッシュテーブルを使用または管理する方法を理解できないようです。
もう少し明確にするために:保存される重要な値は次のとおりです。
- 複素平面上の数の元の実数部
- 複素平面上の数の元の虚数部
- 最大反復回数
- 最大反復回数に達する前、またはポイントが無限大になるまでの完了した反復回数 n
- n回の反復後の複素平面上の数値の最後の実数部
- n回の反復後の複素平面上の数値の最後の虚数部
いつでも、元の実数部、元の虚数部、および最大反復回数を考慮して、最終的な実数部と虚数部を含む結果セットを取得できるようにしたいと思います。
それで、あなたはどう思いますか?ハッシュテーブルは行く方法ですか?問題は、単なる致命的なデータ構造には複雑すぎますか?
どんな助けでも大歓迎です。前もって感謝します!
編集
julienaubertの親切なリクエストで、この問題について少し説明します。
私が持っている目標は、ユーザーが計算の遅延なしにマンデルブロ集合にズームインできるようにすることです(事前定義されたズームを使用している場合でも)。また、サーバーに新しいデータ配列を常に要求しているブラウザーでこれを実行できるようにしたいのですが、新しいx座標とy座標、および複素平面で表示される高さと幅を指定します。ただし、ピクセルの色の値の計算ははるかに高速に実行できるため(max_iter、real_final、およびimag_finalを指定)、ユーザーが色の設定を調整できるようにすると便利なので、ブラウザーのみを送信します。私の投稿に列挙されている変数を使用して、ユーザーのブラウザに色を計算させます。
これを見てください:
drawMandelbrot()関数を見ると、ポイントループがデータセットと呼ばれる変数に重要な値を格納していることがわかります。次に、この変数はdrawMandelbrotFromData()関数で使用され、各ピクセルの色を把握するために必要な残りの計算を実行します。
「cleardabrot」をクリックすると、キャンバスが白い長方形に置き換わります。「refilldabrot」をクリックすると、drawMandelbrotFromData()関数が再度実行されます...これは、面倒な反復計算を実行する必要がない場合に、実際にセットをレンダリングできる速度を示すために行われます。
したがって、ここでの最終的な目標は、これらの値を任意の精度で計算できるようにすることです。これにより、ユーザーはセットの任意のレベルにズームし、サーバーにそれらの正確なポイント(またはできればNEARのポイント)のデータがあるかどうかを判断させることができます。それらの正確なポイント...ある種の範囲クエリを実行せずにこれをどのように実行できるかはわかりませんが)、ピクセルごとに情報を吐き出します。例えば...
- ユーザーは300x300のキャンバスを使用しています。
- 彼は左上隅が
x = .000001
とであるポイントにズームしy = .0000231
ます。 - このフレームで彼が選んだ幅と高さ
w = .00045
はh = .00045
彼はそれらの番号をサーバーに送信し、次に300 * 300のインデックス(各ポイントを表す1つ)を持つ配列を受け取ります。各インデックスには、キャンバス上の各ピクセルの色を決定するために必要な情報が含まれています。ここでの私の質問は...ユーザーが任意のx、y、w、およびh値を入力し、その中の複素平面上の点の値をすばやく引き戻すことができるように、事前に計算されたマンデルブロデータを格納するための最良の方法は何ですか範囲。