Das Volumen der konvexen 3D-Hülle mit kleinen Punkten setzt sich alle auf der Hülle ab

11

Ich habe eine ähnliche Frage wie zuvor, außer in 3D, und ich brauche nur das Volumen, nicht die tatsächliche Form des Rumpfes.

Genauer gesagt, ich bekomme eine kleine Menge von Punkten (z. B. 10-15) in 3D, von denen bekannt ist, dass sie alle auf der konvexen Hülle der Punktmenge liegen (also sind sie alle "wichtig" und definieren die Hülle). Ich möchte nur das Volumen des Rumpfes berechnen, es ist mir egal, wie das tatsächliche Polyeder berechnet wird. Gibt es dafür einen effizienten Algorithmus?

Victor Liu
quelle
Sie wissen, dass die Punkte Eckpunkte des Polyeders sind. Kennst du die Gesichter (Polygone am Rumpf)? In diesem Fall können Sie das Volumen relativ einfach berechnen (als Summe der "Kegel" -Volumen).
Hardmath
1
Ein fauler Weg wäre, zuerst zu triangulieren und dann die Volumina der Tetraeder zu addieren (sehr einfach zu berechnen).
Shuhao Cao
@hardmath: Nein. Ich weiß, wenn ich die Facettenformen kennen würde, wäre es einfach.
Victor Liu
@ Shuhao Cao: Gibt es einen einfachen Triangulationsalgorithmus für diesen Sonderfall? Im Allgemeinen sind 3D-Tetraederungsalgorithmen ziemlich kompliziert, und ich gehe davon aus, dass ich dieses Problem tausend- oder millionenfach lösen muss.
Victor Liu

Antworten:

5

Es würde mich wundern, wenn Sie den Vorschlag von Shuhao Cao übertreffen könnten: Berechnen Sie den Rumpf und dann das Volumen, sobald Sie eine Triangulation des Rumpfes haben. Sie können den Rumpf mit dem inkrementellen -Algorithmus oder dem Geschenkverpackungsalgorithmus berechnen. Wenn Sie wirklich einfachen Code wollen, können Sie einfach eine Schleife über alle möglichen Dreiecke schreiben, um zu sehen, ob sie sich auf dem Rumpf befinden. Für ist dies immer noch ziemlich schnell und Sie können problemlos Verknüpfungen implementieren. Wenn Sie alle Dreiecksflächen haben, wählen Sie einen Scheitelpunkt und machen Sie mit jedem Dreieck und einen Tetraeder . Sein Volumen ist eine Determinante in den Scheitelpunktkoordinaten.n 4 n = 15 v T v 4O(n2)n4n=15vTv4×4

Joseph O'Rourke
quelle
2

Bei einem kleinen Test in MATLAB für die Anzahl der Scheitelpunkte ist jede Komponente eine einheitliche Zufallszahl in :[ 0 , 1 ]N=100[0,1]

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;

Ergebnis:

time_elapse =
              0.014807
Vol =
      0.67880219135839

Ich würde sagen, es ist ziemlich schnell, wenn Sie es Mal ausführen möchten, dauert es nur weniger als 3 Stunden. So ist es:106

Convhull

Ich möchte auch erwähnen, dass er in Professor O'Rourkes Beitrag die Verwendung von Determinanten zur Berechnung der Tetraeder-Volumina erwähnt hat, aber hier bevorzuge ich die Verwendung von Dreifachprodukten. Es ist eine natürlich vektorisierte Operation, die skalierbarer ist als die eingebaute Determinantenroutine (oder Sie können eine Determinante von Hand erweitern: p). Hier ist ein weiterer Test für , das Ergebnis istN = 10 54×4N=105

time_elapse =
              3.244278
Vol =
     0.998068316875714

mit Tetraederzahl . Beachten Sie, dass das Gesamtvolumen ziemlich nahe bei da in zu viele Punkte gruppiert sind . 1 [ 0 , 1 ] 37×1051[0,1]3

Shuhao Cao
quelle
Übrigens wird der Test auf meinem alten 2007 Core 2 T61p durchgeführt.
Shuhao Cao
2

Aus Komei Fukudas FAQ zur polyedrischen Berechnung :

Rd

Es ist bekannt, dass die Berechnung des Volumens eines V-Polytops (oder H-Polytops) # P-hart ist, siehe [DF88] und [Kha93]. Es gibt theoretisch effiziente randomisierte Algorithmen zur Annäherung des Volumens eines konvexen Körpers [LS93], aber es scheint keine Implementierung verfügbar zu sein. Es gibt eine vergleichende Studie [BEF00] verschiedener Volumenberechnungsalgorithmen für konvexe Polytope. Es zeigt an, dass es keinen einzelnen Algorithmus gibt, der für viele verschiedene Arten von Polytopen gut funktioniert.

[DF88] ME Dyer und AM Frieze. Die Komplexität der Berechnung des Volumens eines Polyeders. SIAM J. Comput. 17, 967-974 (1988).

[Kha93] LG Khachiyan. Komplexität der Polytopvolumenberechnung. In J. Pach, Herausgeber, New Trends in Discrete and Computational Geometry , S. 91-101. Springer Verlag, Berlin, 1993.

[LS93] L. Lovasz und M. Simonovits. Zufällige Spaziergänge in einem konvexen Körper und ein verbesserter Volumenalgorithmus. Random Structures & Algorithms , 4: 359 & ndash; 412, 1993.

[BEF00] B. Bueler, A. Enge und K. Fukuda. Genaue Volumenberechnung für konvexe Polytope: Eine praktische Studie. In G. Kalai und GM Ziegler, Herausgeber, Polytope - Kombinatorik und Berechnung , DMV-Seminar 29, Seiten 131-154. Birkhauser, 2000.

Dies scheint die Besonderheiten des 3D-Problems trotz des Titels des Dyer and Frieze-Papiers unter Schwierigkeiten höherer Dimensionen zu begraben. Aus ihrer Zusammenfassung: "Wir zeigen, dass die Berechnung des Volumens eines Polyeders, das entweder als Liste von Facetten oder als Liste von Eckpunkten angegeben wird, genauso schwierig ist wie die Berechnung der Permanente einer Matrix."

PPNvvPPPP={xR3:Axb}

P

Hardmath
quelle