Python: Finde den Bereich des Polygons aus xyz Koordinaten

7

Ich versuche, das shapely.geometry.Polygon Modul zu verwenden, um den Bereich von Polygonen zu finden, aber es führt alle Berechnungen auf der xy Ebene aus. Das ist gut für einige meiner Polygone, aber andere haben eine z Dimension, so dass es nicht ganz das tut, was ich möchte.

Gibt es ein Paket, das mir entweder den Bereich eines planaren Polygons aus xyz -Koordinaten gibt oder alternativ ein Paket oder einen Algorithmus, um das Polygon auf die xy -Ebene zu drehen, damit ich shapely.geometry.Polygon().area ?

Die Polygone werden als Liste von Tupeln in der Form [(x1,y1,z1),(x2,y2,z3),...(xn,yn,zn)] dargestellt.

    
Jamie Bull 28.09.2012, 14:45
quelle

4 Antworten

14

Hier ist die Herleitung einer Formel zur Berechnung der Fläche eines 3D-Flächenpolygons

Hier ist Python-Code, der es implementiert:

%Vor%

Und um es zu testen, hier ist ein 10x5 Quadrat, das sich über den Kopf beugt:

%Vor%

Das Problem war ursprünglich, dass ich es vereinfacht habe. Er muss den Einheitsvektor senkrecht zur Ebene berechnen. Die Fläche ist die Hälfte des Skalarprodukts davon und die Summe aller Kreuzprodukte, nicht die Hälfte der Summe aller Größen der Kreuzprodukte.

Dies kann etwas aufgeräumt werden (Matrix- und Vektorklassen würden es netter machen, wenn Sie sie haben, oder Standardimplementierungen von Determinanten / Kreuzprodukt / Punktprodukt), aber es sollte konzeptionell solide sein.

    
Tom Smilack 28.09.2012, 15:53
quelle
4

Dies ist der letzte Code, den ich benutzt habe. Es verwendet nicht formschön, sondern implementiert Stokes Theorem, um die Fläche direkt zu berechnen. Es baut auf @Tom Smilacks Antwort auf, die zeigt, wie es ohne Numpy geht.

%Vor%     
Jamie Bull 29.09.2012 15:02
quelle
1

Fyi, hier ist der gleiche Algorithmus in Mathematica, mit einem Babyeinheitstest

%Vor%     
Reb.Cabin 06.04.2014 22:23
quelle
0

Die Fläche eines 2D-Polygons kann mit Numpy als Einzeiler berechnet werden ...

%Vor%     
raras 28.07.2013 09:55
quelle

Tags und Links