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?
algorithms
reference-request
computational-geometry
Victor Liu
quelle
quelle
Antworten:
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) n4 n = 15 v T. v 4 × 4
quelle
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 ]
Ergebnis:
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
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 × 4 N.= 105
mit Tetraederzahl . Beachten Sie, dass das Gesamtvolumen ziemlich nahe bei da in zu viele Punkte gruppiert sind . 1 [ 0 , 1 ] 3≈ 7 × 105 1 [ 0 , 1 ]3
quelle
Aus Komei Fukudas FAQ zur polyedrischen Berechnung :
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."
quelle