3次元Delaunay三角形分割の適切なデータ構造とアルゴリズム


8

私は3Dデローニー三角形分割(E3のランダムポイント)の目標を達成するためにいくつかの貧弱なコードを作成しましたが、時間がかかり、5つのポイントが1つの球で正確に(または丸め誤差が原因で)ある場合、私のコードはこの状況を適切に処理できません。

四面体のリストと点のリスト、および四面体とその近傍との関係のリストである基本的なデータ構造を使用します。アルゴリズムはインクリメンタル挿入です。

誰かがどの種類のデータ構造とアルゴリズムを優先するべきか教えてもらえますか?クアッドエッジのデータ構造をこの状況で使用できますか?このトピックに関する論文を読んだとき、このデータ構造は3Dアプリケーションには適していない可能性があります(厳密に言えば、3Dマニホールドアプリケーションには適していませんか?分割統治はより良いアルゴリズムですか?ありがとう!


1
SciCompへようこそ。あなたの質問は、このフォーラムにとって正当なもののようです。多分、あなたはあなたの投稿の明快さとフォーマットに少し取り組むことができます、そして何が速くて有益な答えを得る可能性を改善するでしょう。
1

Voro ++を試してみてください:math.lbl.gov/voro++そのコードは自由に利用可能(かつ変更可能)であり、そこからdelaunay三角形分割を取得できると思います。(または、Zeo ++ maciejharanczyk.info/Zeoppより多くの機能)。
Nick

@Jan、私の英語が下手で申し訳ありません。私はあなたの投稿に感謝して、辞書の助けを借りてこれらの投稿を終えました!
mengxia 2013年

回答:


4

これはscipy(python)から入手可能なqhullで実装されています。何らかの理由でこれらの実装を直接使用できない場合は、ドキュメント内のデータ構造の説明が役立つ場合があります。

http://www.qhull.org/

http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Delaunay.html#scipy.spatial.Delaunay


あなたが提供したリンクには2dの例しかありません。3Dデータ構造は非常に困難です。
Shuoao Cao 2013

また、提供したqhullリンクは、データ構造の説明ページにリンクしていません。stackexchange標準では、これは一般的な-1の回答です。
Shuhao Cao 2013

こんにちは、@ ShuhaoCao、3Dのデローネー三角形分割を実装するのにもっと良い方法を教えてください。
mengxia 2013年

@clipper、あなたの投稿に感謝、私はドキュメントを読みます。
mengxia 2013年

重要な部分は属性セクションにあります:ポイント、シンプレックス、ネイバー、方程式
meawoppl

0

3Dのデータ構造は純粋な代数的です。

必要なのは次の配列です。

  • Vertex V(# of vertices)×3xzyz

  • Element to Vertex E2V:頂点番号付けへの四面体要素、配列。各行は四面体を表し、その行の各列はその四面体のインデックス頂点(この特定のインデックスの行番号)です。(# of tetrahedra)×4V

  • Face to Vertex F2V:配列を使用した、頂点番号付けに対応する三角形の面。各行は面を表し、その行の各列はその面のインデックス頂点(この特定のインデックスの行番号)です。(# of faces)×3V

  • Edge to Vertex F2V:配列を使用して、頂点番号付け。各行はエッジを表し、その行の各列はそのエッジのインデックス頂点(この特定のインデックスの行番号)です。(# of edges)×2V

最初の2つは必要なデータ構造です。他のすべての配列は、代数演算を使用して最初の2つから生成できます。他の顕著なアレイであるElement to EdgeFace to EdgeVertex to Element、(要素が頂点を共有する)Face to Element、(要素が顔を共有する) Edge to Face等、(面がエッジを共有します)

3D Delaunay三角形分割の実装は、他の回答が言うほど簡単ではありません。関心のあるソフトウェアによっては、回答をさらに更新する場合があります。


投稿ありがとうございます。使用したデータ構造は上記の説明とほぼ同じでした。四面体の隣接関係を特定するのは難しいことがわかりました。使用したアルゴリズムはインクリメンタル挿入で、今回は試してみたいと思います。より良い方法..私の貧しい英語を申し訳ありません。
mengxia 2013年

どのような隣接関係を意味しますか?特定の四面体に隣接するすべての四面体を検索できるようにしますか?または、特定のノードの隣接ノードを見つけたいですか?
Daniel Shapero 2013年

@mengxiaその対面配列がありますか?それがあれば、隣接する要素を見つけるのは比較的簡単です。
Shuhao Cao 2013

こんにちは、@ DanielShapero、あなたの投稿に感謝、私は四面体の関係を見つけたい
mengxia

こんにちは、@ ShuhaoCao、私はコードを完成させ、私が好んだ配列はV、E2V、E2f(要素への要素)、E2N(要素への要素)でしたが、エッジ配列はありませんでした。高価な.whatエッジアレイの使用法 この配列を使用すると、コードが高速化するか、より効率的になりますか?ありがとう!
mengxia 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.