問題タブ [fractals]
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#-4.0 - C#でスピーディーな複素数算術を行う方法
私は現在、複素数の算術演算を大量に必要とするC#フラクタルジェネレータープロジェクトに取り組んでおり、数学を高速化する方法を考えています。TestNumericsComplex
以下は、、、、TestCustomComplex
およびで示されている3つのデータストレージ方法のいずれかを使用してマンデルブロ計算の速度をテストする簡略化されたコードセットですTestPairedDoubles
。マンデルブロは単なる例であり、将来の開発者がプラグインフラクタル式を作成できるようにする予定であることを理解してください。
基本的に、使用することSystem.Numerics.Complex
は問題ないアイデアですが、doubleのペアまたはカスタムのComplex構造体を使用することは無難なアイデアです。GPUを使用して算術演算を実行できますが、それによって移植性が制限または中断されませんか?内側のループ(i、x、y)の順序を変えてみましたが無駄になりました。内側のループを高速化するために他に何ができますか?ページフォールトの問題が発生していますか?固定小数点数システムを使用すると、浮動小数点値とは対照的に、速度が向上しますか?
私はすでにParallel.For
C#4.0で知っています。わかりやすくするために、コードサンプルからは省略しています。また、C#は通常、高性能に適した言語ではないことも認識しています。プラグインにはReflectionを、ウィンドウ処理にはWPFを利用するためにC#を使用しています。
編集
GPUが唯一の実行可能なソリューションのようです。C / C ++との相互運用性は無視します。これは、将来のプラグインで相互運用性を強制するほどのスピードアップが重要であるとは思わないためです。
利用可能なGPUオプション(私は実際にしばらくの間調べてきました)を調べた後、私はついに私が信じているものが優れた妥協点であることに気づきました。私は、プログラムがリリースされるまでにほとんどのデバイスが標準をサポートすることを期待して、OpenCLを選択しました。OpenCLTemplateは、 clooを使用して、.Net(アプリケーションロジック用)と "OpenCL C99"(並列コード用)の間のわかりやすいインターフェイスを提供します。プラグインには、統合を容易にするためのSystem.Numerics.Complexによる標準実装に加えて、ハードウェアアクセラレーション用のOpenCLカーネルを含めることができます。
OpenCL C99コードの記述に関する利用可能なチュートリアルの数は、標準がプロセッサベンダーに採用されるにつれて、急速に増えると予想しています。これにより、プラグイン開発者がオプションを利用することを選択した場合に、適切に定式化された言語を提供しながら、プラグイン開発者にGPUコーディングを適用する必要がなくなります。また、コードはOpenCLを介して直接変換されるため、IronPythonスクリプトはコンパイル時まで不明であるにもかかわらずGPUアクセラレーションに同等にアクセスできることを意味します。
GPUアクセラレーションを.Netプロジェクトと統合することに興味がある将来の人には、OpenCLTemplateを強くお勧めします。OpenCLC99を学習することには認められたオーバーヘッドがあります。ただし、代替APIを学習するよりも少し難しいだけであり、例や一般的なコミュニティからのサポートが向上する可能性があります。
animation - フラクタルの構築とアニメーション化
フラクタルパターンを学び、構築するために必要なソフトウェア/本を誰かが推薦できますか?フラクタルパターンもアニメートできるようにしたいと思います。winampから何かのように。
imaging - フラクタル顕微鏡シミュレーター
私は、顕微鏡などのイメージング ハードウェアを制御するために使用されるソフトウェアの作業を行ってきました。これは、機器へのアクセスを必要とする新しい/異なるアルゴリズムをテストすることが難しいことを意味します。これらのテスト目的の一部に使用できる合成機器を作成したいと考えており、ある種のフラクタル画像生成を使用して合成画像を作成することを考えていました。重要なのは、ある種の決定論的な方法で、多くの異なる「倍率」と場所で特徴を生成できることです。これは、テストされているアルゴリズムの一部が、以前に「画像化された」領域をパン/ズームして再配置する必要がある場合があるためです。これらの基本画像に、適切な機器の「欠陥」(フォーカス、ノイズ、彩度など)を適用できます。
ベース画像に適切なフラクタル アルゴリズムを選択/実装する方法について、少し迷っています。どんな助けでも大歓迎です。できれば、次の品質を備えている必要があります。
- 新しい画像領域を高速にレンダリングします。
- 可能な限り多くの場所と縮尺でかなり広い「機能」カバレッジ。
- 決定論的であること (ただし、ランダムな開始パラメーターから初期化されます)。
- 画像をより「本物の」画像に近づけるための調整機能。
項目 2 は重要です。たとえば、合成スコープを制御するソフトウェアがこれらの領域の 1 つに分類される可能性があるため、大きな滑らかな/空の領域を持つマンデルブロ セットは適切ではない可能性があります。
これまでのところ、マンデルブロのようなものを使用することを考えていましたが、ランダムにシフト/回転/スケーリングし、2 つ以上のフラクタル セットをマージして、より完全な「機能」カバレッジを取得しました。
私はフラクタル フレーム アルゴリズムの画像も見てきました。
最後に、ある種の一時停止した粒子シミュレーションの実行を使用して、より細胞に似た画像 (私の現在のイメージング ターゲット) を生成することを考えましたが、このアプローチを他の要件と連携させることができるかどうかはわかりません。
編集: @Jeffrey - PSRNG を完全に制御できる限り、ある種の地形生成が進むべき道のように思えます。おそらく、保存されている初期シード + x 位置 + y 位置を使用して、乱数を生成できますか? しかし、あなたが言及したように、最も粗い縮尺でベース地形を作成し、特定の事前定義された「倍率」でこのベースに新しい決定論的な擬似ランダムバリエーションを追加することを除いて、スケール全体で地形を一貫して生成する方法がわかりません. また、次のレベルの地形をいつ生成するかについても注意する必要があります。なぜなら、私が積極的すぎると、結果を適切に生成して統合し、より粗いレベルで表示する必要があるからです...これが、最初により「伝統的な」フラクタルに傾いていましたが、
image-processing - Intel Image Processing ライブラリのオープンソースの置き換え
独自の Intel Image Processing Library に代わるオープンソース ライブラリはありますか? 最初に、任意のカーネルで画像の読み込み、保存、フィルタリング (3x3、5x5 など) を行う必要があります。float として格納されたピクセル値を持つ多チャンネル画像のサポートはすばらしいでしょう。また、優れたドキュメントを備えたライブラリが必要です。
PS。Linux/x86 と Windows/x86 の両方。Windowsのmingw32で使いたいです。
PPS。このライブラリを使用して解決する必要がある最初のタスクは、フラクタル次元を計算することです。
ありがとう
f# - F# Fractal - わからないバグ
ネットで見つけた例を作ろうとしています。F# の 3D フラクタルです。ここにあります: http://toasp.net/blog/infinite-cheese.aspx . ソース コードは、記事の最後でダウンロードできます。記事とサンプルは 2007 年に書かれたものなので、コードは少し古くなっていると思います。エラーを引き起こし、コードがコンパイルされないコード ブロックが 1 つあります。
when
キーワードには下線が引かれ、エラー メッセージは次のようになります。
予期しないキーワード 'when' が式に含まれています。'->' またはその他のトークンが必要です。
これの何が問題なのかわかりません。コードをよりよく理解するために、言語仕様を検索しました。私の知る限り、Set.mem
関数や->>
演算子については何もありません。何が間違っている可能性がありますか?
image-processing - 2D画像のフラクタル次元を推定します
2D画像(写真)の一部のフラクタル次元の値を推定したい。この値の推定値を計算するにはどうすればよいですか?たとえば、RGBカラーの15x15ピクセルのサブイメージの場合ですか?
ありがとう。
python - カラー パレットからカラー プログレッションを作成する方法
私が取り組んでいるこのアルゴリズムの目標は、提供された色から色の進行を出力することです。色の進行とは、2 つの色 (色 A、色 B) の間に「フェード」効果を作成し、その間にすべての色の値 ((R、G、B) タプル) を格納することを意味します。
たとえば、提供されるものが完全な黒A = (0,0,0)
と完全な白である場合B = (255,255,255)
、進行結果は次のようになります。
P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)
最初は白く、徐々に黒くなっていきます。もちろん、白と黒の場合は非常に簡単です (RGB を各ステップで 1 つずつ 255 倍に増やすだけです)。しかし、A = (180,69,1) と B = (233,153,0) のように、任意の 2 つの色でこの手順を実行したい場合はどうすればよいでしょうか??
重要な注意: 16 進数 (またはその他の種類の色表記) を使用する方が簡単な場合は、それを使用することもできます。どのタイプを指定するかを指定するだけです (PIL (Python Imaging Library) に取り組んでいることを考慮に入れてください)。ですので、それに対応していれば大丈夫です)
明らかに、可能な限り均一な分布でなければならず、進行は均一でなければなりません。
フラクタル ジェネレーター (マンデルブロ セット、必要に応じてググってください) で使用できるように、このアルゴリズムを理解する必要があるため、進行ができるだけ穏やかで、しゃっくりがないようにすることが重要です。
前もって感謝します。
java - Java での plot/drow フラクタルのグラフィック ライブラリ
フラクタル (マンデルブロー集合) を描画する目的で、特定の色でピクセル ポイントをプロットできるグラフィック ライブラリを探しています。フラクタルの背後にある基本的な数学を読み、理解しました。アルゴリズムは難しくありません。
しかし、どのグラフィックライブラリを使用できるかわかりません。洗練された複雑なものは必要ありません。ピクセルセットを色で印刷するだけです。あなたは私に何を提案しますか?カイロ?OpenGl?.
注: 私は pygtk の経験しかありません。Java API を読んでいて、fillRect メソッドと BufferedImages を見つけましたが、少し複雑に思えます。
ありがとう ;)
landscape - 既存の地形に基づくオンザフライの地形生成
この質問は、ここで提起された質問と非常によく似ています。
私の問題は、次のようなマップがあることです。
このマップは、2Dパーリンノイズを使用して作成され、作成された高さマップを実行して、対応する要素の高さまたは勾配に基づいて、地形内の各要素にタイプと色の値を割り当てます。これはかなり標準的です。マップ配列は2次元であり、画面サイズの正確な寸法(ピクセル/ピクセル)であるため、1200 x 800の生成では、リグで約2秒かかります。
次に、強調表示された長方形を拡大します。
明らかに、サイズが大きくなると、ディテールが失われます。そしてここに問題があります。その場で追加の詳細を作成し、プレーヤーが動き回るときにそれをディスクに書き込みたいと思います(プレーヤーは、グリッドに沿った動きに制限されたドットになります)。これを行うための2つのアプローチがあり、最初に頭に浮かんだのはすぐに実装したものです。
これは、前の画像の黄色のグリッドスペース(中央の左側)で強調表示されている、古い地形のサンプリングされた要素から作成された新しいバイアスされたローカル地形の拡大図です。ただし、このシステムでは大幅な変更が必要になります。たとえば、黄色のグリッドスペースの1つ上にあるユニットをビーチタイルに移動すると、地形が完全に変化します。
したがって、それが正しく機能するためには、過度の量を実行する必要があります。プレーヤーが次の場所に到達するために必要なローカル世界の40ほどのグリッドスペースを移動したときにスムーズな遷移を作成するために、単語は補間になると思います。世界中でタイル張り。それは複雑で非常にエレガントではないようです。
2番目のアプローチは、元のマップのグリッドを小さなビットに分割し、各正方形を4で割ることです。私はこれを実装しておらず、実際に詳細を増やす方法がわかりませんが、おそらくそれが最善の解決策になると思います。
これにどのようにアプローチできるかについてのアイデアはありますか?ローカルでオンザフライである必要があることに注意してください。地図の解像度を上げるだけでは、絶対に避けたいと思います。
java - 中点変位地形アーティファクト
Java で中点変位アルゴリズムを実装しようとしています。ダイアモンド スクエア アルゴリズムとも呼ばれます。私の参照はhttp://www.lighthouse3d.com/opengl/terrain/index.php3?mpdです。右端と下端以外は正しく動作しているようです。
よく見ると、「粗い」エッジが見られます。誰が間違っているのか指摘できますか?この効果は、このアルゴリズムの他のオンライン実装では観察されていません。
コード
注釈
この部分では、変数displacementBound、デフォルト値に初期化されたdoubleの2D配列、およびiterationsと呼ばれる別の変数を定義します。
この部分でループが宣言されます。mPDIterationsループに対して実行されます。その場しのぎの配列Bを作成してAの更新バージョンを保持し、BをAより大きくして新しいデータ ポイントを保持します。その後、2 つの for ループがあり、1 つは別の内部にネストされています。これは、Aの現在の値を一時的なBに配置し、他のすべての行と他のすべての列を空白のままにします。次の例を見てください。
次のコードは次のとおりです。
このセクションでは、中心のすべての点 (北、南、東、西のすべての基本方向に空の隣接セルがあるセルを参照) に、隣接する 4 つの角点から平均化された値が与えられます。変位値がそれに追加されます。これをダイヤモンドステップと呼びます。「センター」とは何かを明確にするには:
そして、次のコード セクション:
この部分は、コードの前のセクションに類似しています。中心ではない空の点にそれぞれ新しい値を割り当てます。この値は、北、南、東、西の基本方向に隣接する要素の平均であり、別のランダムな変位値が追加されます。これをスクエアステップと呼びます。上記のコードは、非中心点と空の点のみに新しい値が与えられることを保証します。これらのポイントは、以下で明確にされるサイド ポイントと同等です。
whileループを終了するセクションを以下に示します。
上記の記事に記載されている情報によると、変数の変位バウンドは、while ループの最後を構成する上記のセクションで削減されます。Aの内容は、ループの別の反復を開始または終了する前に、Bの更新された内容をAに割り当てることによって更新されます。
最後に、補助的なメソッドaverageFromCornersAndDisplace()、averageFromSidesAndDisplace()、およびwrap()が含まれていますが、それらの追加の説明は不要です。メソッドrandomDisplacement()はまったく含まれていません。参考までに、指定された数値bによって境界付けられたランダムな浮動小数点数xを返します。