x
座標が配列によって与えられるセット ポイントがありy
、z
各ポイントの密度フィールドの値が配列に格納されd
ます。均一なグリッド上に密度場を再構築したいと思います。それを行うための最良のアルゴリズムは何ですか? Pythonでは、scipyモジュールがgriddata
関数に便利であることは知っていますが、独自のコードを書きたいのですが、ヒントが必要です。
3 に答える
1つのアプローチは、散乱点のドロネー三角形分割を形成し[x,y,z]
(実際には、3Dの場合は四面体化です!)、四面体の頂点で定義された密度フィールドの線形表現を使用して、各要素内で補間を実行します。
各構造化グリッドポイントでの密度を評価するには、(i)ポイントがどの四面体内にあるかを判断し、(ii)線形補間を評価します。
Delaunay三角形分割の形成は簡単ではありません。選択した言語に応じて、これに使用できる優れたライブラリがいくつかあります。1つの良いオプションはCGALです。
お役に立てれば。
ある種のスカラー フィールドがあり、ポイントがフィールドの原点である場合、すべてのラティス ポイントを調べて、ソースが与えられたフィールドの強度を計算することで、ブルート フォース アプローチを実装できます。フィールドが多かれ少なかれ一定である広いボリュームを「ブランキング」できる再帰的な方法と、あるポイントから次のポイントへの変動を計算することで CPU 時間を節約する手法の両方があります。
ポイントが値のサンプリングである場合、空間をボリュームに分解し、値を補間する必要があります。単純なボロノイ分解 (通常、これは降水量の測定では 2D で行われます) またはDelaunay 四面体化 ( TetGenのドキュメントを参照してください)を使用できます。最初のアプローチは、関数が各ボロノイ ボリューム全体で一定であると仮定します。最後は、三線補間をレンダリングできます。
3D グリッドを滑らかにする必要がある場合は、トライリニア補間が最適なアプローチのように見えます。
通常のグリッド内の特定のポイントからの距離順に 3D ポイントのリストを維持することを含む、高速な視覚化に使用される他の方法もあります。グリッド内を移動するときは、2 次増分を使用して距離を再計算します。次に、選択したカーディナリティのポイントのサブセットに基づいて単純な補間を実行します (つまり、距離 d1..d4 にある 4 つの最も近いポイントを考慮する場合、値 v1..v4 を比例的に重み付けして P の値を計算します)。 . このアプローチは高速で簡単に自分で実装できますが、ポイント間の最小距離がラティス ステップよりも小さい場合はパフォーマンスが低下することに注意してください (これが発生する場合は、より多くのポイントを考慮することで補正できます。サンプリングされた関数は同じスケールで滑らかです)。
数学的な方法を自分で実装したい場合は、もちろん理論を学ぶ必要があります。この場合、それは3D 散乱データ補間です。
Wikipedia、MATLAB ヘルプ、およびscipy ヘルプには、少なくとも半ダースの異なる方法があると書かれています。WP にはそれらについてのかなり良い説明があり、比較記事もありますが、そのような専門用語が集中する主題について母国語で何かを見つけることを強くお勧めします。