例としてマップを使用した分析サーフェスの生成。 パート3

はじめに



正確な物理モデリングには、ハイポリカードが必要です。 カードの精度が高いほど、より多くのメモリを消費し、高さを取得するためにより多くのデータを処理する必要があります。 スプライン補間を使用すると、現在の緯度と経度に便利なステップで、任意の解像度のグリッドを取得できます。



仕事内容



パート1.データの準備

パート2.均一なグリッドの生成

パート3.分析サーフェスの作成



サブタスクの目的



すべての開始点を含む均一なグリッドからスプラインサーフェスを取得します。 任意のステップで2つの座標に高さ計算を実装します。



アルゴリズム



アルゴリズムを検索する際の最大の問題は、高さマップ(補間)のすべての必要なポイントを含む接続されたスプライン(境界条件)からサーフェスを作成する適切な説明を見つけることでした。



また、初期データと比較して、サーフェス上のパーツの数が減少するだけであることに留意する必要があります。 シャノン-コテルニコフの定理を思い出すのに十分です



高さマップからスプラインサーフェスを作成するアルゴリズムの優れた説明は、 E。A. Nikulin著の本「コンピュータージオメトリとコンピューターグラフィックスアルゴリズム」に記載されています。 この領域には多くの理論的な材料と数学が含まれています(ボリュームサーフェスの作成を可能にするフラクタルアルゴリズムによるサーフェス生成へのアプローチの説明もあります)。



数学は本で見つけることができ、実装は記事の最後に添付されるので、ここでは数学的な計算とコード例を示しません。



処理結果



均一なグリッドを処理した結果、スプライン係数を持つかなり大きなファイルが得られます。



1 33

3.30000000000000E+0001 1.00000000000000E+0000 -1.51788304147970E-0018 -1.95156391047391E-0018

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

2.16840434497101E-0019 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

2.16840434497101E-0019 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1.50000000000000E+0002 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1 34

3.40000000000000E+0001 1.00000000000000E+0000 8.67361737988404E-0019 2.38524477946811E-0018

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

2.16840434497101E-0019 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

2.16840434497101E-0019 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1.50000000000000E+0002 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1 35

3.50000000000000E+0001 1.00000000000000E+0000 -2.60208521396521E-0018 -3.03576608295941E-0018

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

2.16840434497101E-0019 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

2.16840434497101E-0019 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000



1.50000000000000E+0002 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000

0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000











つまり、均一なグリッドの4ポイントごとに、独自のスプラインを作成しました。このスプラインは、2番目の導関数に沿ってすべての隣接する導関数と分離できません。 これで、スプラインの任意のポイント、したがってマップ全体の高さを決定できるようになりました。



ご覧のとおり、スプライン係数の行列は非常にまばらであるため、圧縮率は高くなります。 データ処理速度を落とすことなく、カードが占有するスペースを節約できます。



結果の表面の例:























結論



マップを自由に移動できる機能は、アプリケーションソフトウェアの開発に大きな可能性をもたらします。 ランドスケープの詳細を動的に変更するアルゴリズムは、完全な強度( LODMegaTexture )で機能し始めます。 高さは一定の複雑さで計算されます(行列の乗算)。



次に、投影ではなくジオイド上に直接マップを作成して、地球の領域または地球の表面全体を高精度でシミュレートできます。 そして、それはすべてファンタジーに十分です。



この結果を達成する他のアルゴリズムがあります。 それはすべてタスクに依存します。 提案されたアプローチは、反射の理由とタスクの解決への小さな推進力のみを提供します。



Delphi7のジェネレーターソース



All Articles