問題タブ [mandelbrot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C でズームを実装したマンデルブロ
マンデルブロー コードにズームイン/ズームアウト機能を実装しようとしています。ズーム機能を部分的に実装しましたが、ズームインするとぼやけてしまい、マンデルブロー セットが見えなくなります。
これが私のコードです...
PS: これは宿題ではありません..
opengl - マンデルブロのズーミングの難しさ
この質問がどの分野に関連しているかはわかりませんが、試してみます。マンデルブロ集合を計算しようとしています。大きな違いは、出力が 3D モデルであることです。セットの計算は正確に行われますが、(2D 平面上にある) ax,y ポイントにズームしようとすると、期待どおりに機能しません。ここでの主な概念は、次のズーム ポイントを抽出することです。これにより、セットの新しい境界エッジを計算できるようになります。いつ
結果は未知の点にズームしています。計算に何か問題があると思います。私は次のことをやろうとしました:
編集:私はあなたが私に与えた例のいくつかを見直しましたが、私の状況に最も適した適切な答えはまだ見つかりません.
cuda - 最大反復回数を 5,500,000 より大きく設定すると、マンデルブロ集合を計算するこの CUDA コードが失敗するのはなぜですか?
高レベル モデルを CUDA C コードに変換するコード シンセサイザーを作成しています。テスト モデルとして、各 XY 座標の反復カウントを GPGPU 上で並列に実行するマンデルブロ ジェネレーター アプリケーションを使用しています。画像は 70x70 ピクセルで、XY 座標の範囲は (-1, -1) から (1, 1) です。簡単にするために、アプリケーションは、float
3 つの要素の各グループに X 座標と Y 座標が含まれ、その後に最大反復回数が続く大きな配列を想定しています。GPGPU の各スレッドは、各 3 グループ セットの先頭へのポインターを受け取り、反復回数を計算します。
合成された CUDA コードは、最大反復回数が 5,500,000 未満の場合は完全に機能しますが、それを超えると出力が完全に偽物になります。説明のために、以下の例を参照してください。
max_it
が 5,000,000 に設定されている場合の通常の出力:
max_it
が 6,000,000 に設定されている場合の偽の出力:
そして、ここにコードが続きます:
mandelbrot.cpp (メイン ファイル)
mandelbrot.h (ヘッダー ファイル)
mandelbrot.cu (CUDA ファイル)
mandelbrot.cu
興味深いのは、計算コードが含まれているファイルです。mandelbrot.cpp
は、ユーザー入力を取得して入力データを生成する単なるドライバーであり、簡単に使用できるmandelbrot.h
ヘッダー ファイルです。mandelbrot.cpp
mandelbrot.cu
この関数executeModel()
は、モデル内のプロセス間でデータを伝播するラッパー関数です。この場合、プロセスは 1 つしかないためexecuteModel()
、かなり無意味です。
parallelmapSY_1__kernel_wrapper()
デバイスにメモリを割り当てて並列実行を準備し、入力データを転送し、カーネルを呼び出し、結果をホストに転送します。
parallelmapSY_1__kernel()
はカーネル関数でparallelmapSY_1_func1()
、適切な入力データで呼び出すだけです。また、生成されたスレッドが多すぎる場合の実行も防ぎます。
したがって、実際の関心領域は ですparallelmapSY_1_func1()
。私が言ったように、最大反復回数が 5,500,000 未満の場合は完全に機能しますが、それ以上にすると、想定どおりに機能しないようです (上記の出力ログを参照)。「なぜ反復回数をそれほど多く設定するのですか? それは必要ありません!」と尋ねる人もいるかもしれません。確かにそうですが、純粋な C 版はより高い最大反復回数で完全に機能するのに、なぜ CUDA バージョンを使用しないのでしょうか? 私は一般的なツールを設計しているので、この例で機能しない理由を知る必要があります。
では、5,500,000 を超えたときに最大反復回数が失敗したときに、コードが失敗したように見えることを知っている人はいますか?
c++ - マンデルブロ集合への単純なズームインを実行する方法
マンデルブロ集合の「ズーム」ビューとそれに関連する数学に関する一般的な質問があります。256X256ウィンドウサイズのマンデルブロ集合を値で実装しました
次に、正方形の領域を選択します。これらは、左上端(76,55)と右下端(116、99)の座標です(辺44の正方形が選択されています)
だから、私は選ぶx2 = x1 + 44 ; y2 = y1 + 44;
これらの新しい座標を複素平面に変換するにはどうすればよいですか?そして、新しい値のセットに対してそれを計算するために、新しい実数値と虚数値はどのように変化しますか?
これは私がこれまでに試したことです。
私は数学を理解するのに苦労しています、そしてまた「ズーム」ビューを生成することに関して、そしてどんな助けもありがたいです!!
c++ - 複数コアのプログラミング / マンデルブロー集合 / c++
"ppl.h" ヘッダーの Concurrency::parallel_for アルゴリズムについて質問があります。この例は、Ivor Horton の著書「Beginning Visual C++ 2010」からのものです。
完全な .cpp ファイルへのリンク: http://media.wiley.com/product_ancillary/83/04705008/DOWNLOAD/500880ch13.zip "Ch13/Ex13_03/Ex13_03.cpp"
この特定の例では、並列計算を使用してマンデルブロ集合を構築する方法を示しています。
それを処理する関数は次のとおりです。
基本的に、この関数は、関数で計算されているマンデルブロ集合をレンダリングしIteratePoint
ます。
ピクセルの水平行はランダムな順序でレンダリングされます。私の質問はConcurrency::parallel_for
、ウィンドウのどの領域(つまり、ピクセルの「y」水平行のセット)がどのコアによってレンダリングされるかをアルゴリズムがどのように正確に決定するかです。
ps 実際の例はこちら: http://hotfile.com/dl/137661392/d63280a/MANDELBROT.rar.html
お時間をいただきありがとうございます!
opengl - CUDA VBO を使用した OpenGL 高さマップの描画
以前ここで VBO に関していくつか質問をしましたが、受け取ったコメントから、新しいアプローチを採用する必要があると判断しました。
簡単に言えば、約512X512ポイントの大きなFLOAT配列で定義されたマンデルブロー集合を描画しようとしています。私のプログラムの目的は、ユーザーがズームと世界の向きを制御できるようにすることです (これは 3D モデルです)。これまでのところ、描画プロセスが遅いため、GL_TRIANGLE_STRIP を使用して全体を描画しましたが、これは悪い選択でした。また、私の描画スタイル (glVertex を呼び出す順序) を実装すると、VBO のコーディングが不可能になったためです。
それでいくつか質問があります。
この説明の後でも、計算を制御するのはユーザー次第であるため、VBOが最良の選択であるかどうかはわかりません.プログラムによって引き起こされる計算ごとに、マンデルブロセットを再計算し(〜60ms)、再コピーする必要がありますバッファへのポイント: 時間がかかるプロセス (?ms)。
このプログラムでは、ユーザーが世界を移動することもできるため、ここでは計算が行われないため、ここでは VBO が最適です。
1.高さマップを描画する最良の方法は何ですか (配列内の各セルが高さのみを保持する場合)
2.VBOに適用してcudaに転送するにはどうすればよいですか(cudaRegisterBufferなど)
3. モードを区別し、VBO が必要な場合 (計算なしモード) と必要でない場合 (計算モード) を決定する方法はありますか?
zooming - マンデルブロのサイズをズーム値に変換する方法
私のマンデルブロー集合は、XY ワールドで長方形の形状として定義されて
います。元のサイズから四角形のサイズまでの合計ズーム率の値を知る方法はありますか?
ありがとう、イガル!
opengl - ぬりえマンデルブロ集合
私はこのようなものを思いついた:
私はいくつかの方法で試しましたが、ほとんどの場合、セットの周りに単一の色が表示されるか、画面全体が同じ色になります。
色を正しく設定するには?
3d - マンデルブロ集合が極限に到達するのが早すぎる
OpenGLを使用してズームして画面に印刷する機能を備えた、マンデルブロー集合を計算しています。
ご存知のように、マンデルブロー集合は長方形 (右上の点と左下の点) で定義され、「ズームイン」と「ズームアウト」するたびに、左下の点を右上に移動して次の点を変更し、右上はその逆。最終的には、これらの 2 点が互いに出会い、ズーム プロセスが終了するはずです。
多くの YOUTUBE ムービーによると、一部のムービーでは 1000X ズームに到達できることがはっきりとわかります。私のプログラムでは、X6にほとんど到達できません。デバッグ中に、マンデルブロー集合を定義する2つのポイントが互いに到達するのを見ることができます(x1,y1) = (x2,y2)
。
いくつか:
(x1,y1) & (x2,y2)
float として定義されています。代わりに double を使用する必要がありますか? 私のマンデルブローは (512X512) ポイントで定義されています。それで十分?問題に関連しているかどうかはわかりませんが。
私が直面している別の問題は、セットを高さマップ(3Dセット)として印刷していることです。各 Y コンポーネントが、無限に達するまでにかかった反復の量を表す場合。ただし、セット全体をズームインするたびに、カメラの位置がどんどん高くなり、最終的にはカメラがセットによって消費されます。差を計算し、カメラをセットから遠ざける方法はありますか(それに応じてズームポイントから?)
セットを計算するコード:
いくつかのこと:
instance->FoundPointOnHost = 拡大したい点。
instance->constVal = セットの元のサイズが含まれています (最初は [xru,yru] [xld,yld] に等しい)
(xru,yru) = 右上セットのポイント (xld,yld) = セットの左下のポイント
ありがとう!
opengl - マンデルブロ高さマップを1か所にとどめる
マンデルブロ集合が高さマップ行列として表されるという小さな問題があります。すべてのセルに反復回数が含まれている場合、無限大以下に到達するのに1つのポイントが必要でした。
最後に、3Dモデルが印刷されます。すばやくズームすると、セット全体が浮いていることがわかり始めたときに問題が発生します(ピクセルごとに反復回数が増えるため)。
モデルを強制的に0(y軸)にとどまらせながら、各ポイントの反復回数が異なるときにモデルを成長させる方法はありますか?
反復回数が最も少ないポイント(および基本的にセット内の最低ポイント)を見つけて、すべてのポイントからそれを差し引いてみましたが、それは機能しませんでした(反復回数がズームプロセスごとに変わるため、たとえば、値5から100にジャンプを設定します)。