小さなポイントの3D凸包のボリュームは、すべて船体に設定されます


11

3Dを除いてこれと似た質問があります。船体の実際の形状ではなく、ボリュームだけが必要です。

より正確には、3Dで小さなポイントセット(たとえば、10〜15)が与えられます。これらはすべて、ポイントセットの凸包上にあることがわかっています(したがって、それらはすべて「重要」であり、ハルを定義します)。船体の体積だけを計算したいのですが、実際の多面体を計算する必要はありません。これを行うための効率的なアルゴリズムはありますか?


ポイントは多面体の頂点です。あなたは顔(船体上のポリゴン)を知っていますか?もしそうなら、あなたはかなり簡単に(「コーン」ボリュームの合計として)ボリュームを計算することができます。
hardmath

1
怠惰な方法では、最初に三角形分割し、次に四面体のボリュームを合計します(計算が非常に簡単です)。
Shuhao Cao 2013

@hardmath:いいえ。ファセットの形状を知っていれば簡単でしょう。
Victor Liu

@Shuhao Cao:この特別な場合のための簡単な三角測量アルゴリズムはありますか?一般に、3D四面体化アルゴリズムは非常に複雑であり、この問題を数千回または数百万回解決する必要があると思います。
Victor Liu

回答:


5

Shuhao Caoの提案に打ち勝つことができるとしたら、私は驚きます。船体の三角形分割ができたら、船体を計算してから、ボリュームを計算します。インクリメンタルアルゴリズムまたはギフトラッピングアルゴリズムを使用してハルを計算できます。本当に簡単なコードが必要な場合は、考えられるすべての三角形に対してn 4ループを作成して、それらが船体にあるかどうかを確認できます。以下のためのn = 15、これはかなり速いまだ、あなたは簡単にショートカットを実装することができます。すべての三角形の面ができたら、頂点vを1つ選び、各三角形Tvで四面体を作成します。そのボリュームは4 ×O(n2)n4n=15vTv頂点座標の 4行列式。4×4


2

MATLABにおける小テストは、頂点の数を、各コンポーネントは、中に一様乱数である[ 0 1 ]N=100[01]

N = 100;
p=rand(N,3);
tic;
T = delaunayTri(p(:,1),p(:,2),p(:,3));
t = T.Triangulation;
e1 = p(t(:,2),:)-p(t(:,1),:);
e2 = p(t(:,3),:)-p(t(:,1),:);
e3 = p(t(:,4),:)-p(t(:,1),:);
V = abs(dot(cross(e1,e2,2),e3,2))/6;
Vol = sum(V);
time_elapse = toc;

結果:

time_elapse =
              0.014807
Vol =
      0.67880219135839

私はそれはあなたがそれを実行したい場合には、適度に高速であると言うだろう回、それだけで3時間未満かかります。これは次のようなものです。106

convhull

4×4N=105

time_elapse =
              3.244278
Vol =
     0.998068316875714

7×1051[01]


ところで、テストは私の古い2007 Core 2 T61pで行われました。
Shuoao Cao 2013

2

福田公明の多面体計算FAQから

Rd

Vポリトープ(またはHポリトープ)の体積の計算は#Pハードであることがわかっています。[DF88]および[Kha93]を参照してください。凸状体の体積を近似する理論的に効率的なランダム化アルゴリズムがあります[LS93]が、実装は利用できないようです。凸状ポリトープのさまざまな体積計算アルゴリズムの比較研究[BEF00]があります。それは、多くの異なるタイプのポリトープに対してうまく機能する単一のアルゴリズムがないことを示しています。

[DF88] MEダイアーとAMフリーズ。多面体のボリュームを計算する複雑さ。SIAM J. Comput。、17:967-974、1988。

[Kha93] LG Khachiyan。ポリトープ体積計算の複雑さ。J. Pachの編集者、「離散および計算幾何学の新しいトレンド」、91〜101 ページ。Springer Verlag、ベルリン、1993年。

[LS93] L. LovaszとM. Simonovits。凸状のボディをランダムに歩き、ボリュームアルゴリズムを改善しました。 ランダム構造とアルゴリズム、4:359-412、1993。

[BEF00] B. Bueler、A。Enge、およびK. Fukuda。凸状ポリトープの正確な体積計算:実用的な研究。G. KalaiおよびGM Zieglerの編集者、Polytopes-Combinatorics and Computation、DMV-Seminar 29、131-154ページ。Birkhauser、2000年。

これは、ダイアーとフリーズの論文のタイトルにもかかわらず、より高い次元の困難の中で3D問題の詳細を埋めているように見えるかもしれません。アブストラクトから:「ファセットのリストまたは頂点のリストとして指定された多面体の体積を計算することは、行列のパーマネントを計算するのと同じくらい難しいことを示しています。」

PPNvvPPPP={バツRバツb}

P

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.