Volumen von unregelmäßigen Körpern berechnen



  • Hi,

    ich bin auf der suche nach einer Formel mit der ich das Volumen vom einem eckigen
    unregelmäßigen Körper (Polyeder) berechnen kann. Alle Punkte (x,y,z) sind bekannt. Gibt es da eine einfache möglichkeit?

    Vielleicht gibt es ja in C++ schon was mit dem man so was machen kann?

    Danke schon mal.

    Gruß
    Jürgen



  • Kommt auf deine Definition von "einfach" an.
    Per Computer könnte man den Körper in Tetraeder zerlegen und deren Volumen berechnen und summieren.



  • Ja, das hab ich leider auch schon feststellen müssen, dass das nicht ganz so einfach ist. Aber gibt es einen Weg wie ich da am besten vorgehen kann um das zu bewerkstelligen? Wie kann ich den Körper zerlegen lassen und dann deren Volumen berechnen?



  • Kommt auch drauf an, wie der Körper gegeben ist.
    Die reine Menge der Eckpunkte ohne Informationen über deren Verbindungen reicht nicht. Mindestens die Kanten müssen definiert sein. Daraus lassen sich die Begrenzungsflächen bestimmen. Aus einer Begrenzungsfläche und einem "gegenüberliegenden" Punkt ergibt sich dann ein Tetraeder. Mit den Flächen dieses Tetraeders lassen sich dann weitere Teraeder ermitteln. Bei der Bestimmung dieser Unterkörper muß man immer prüfen, daß der komplette Körper innerhalb des Gesamtkonstrukts liegt. Sonst ist der gewählte "gegenüberliegende" Punkt falsch gewählt.

    Edit: google mal nach "irregular mesh"



  • ich habe auch die Informationen über deren Verbindung. Bei der suche nach irregular mesh habe ich bis jetzt leider nichts brauchbares gefunden.
    Vielleicht hast Du ja noch einen Tipp?



  • Ich meinte wohl "triangulated irregular network", sorry. Das ist jedenfalls der Name des Problems für 2D.

    hier scheints auch Links 3D-Lösungen zu geben:
    http://en.wikipedia.org/wiki/Delaunay_triangulation



  • So was ähnliches hab ich auch schon gemacht. Nicht nach Delauney sondern eine eigene triangulation. Dabei ging es allerdings nur darum, 2D oder auch 3D-Polygone zu triangulieren. Diese haben ja kein Volumen wie jetzt die Polyeder. Leider ist unter dem Link nichts mit 3D-Volumen.



  • Na wenn du sowas schon selbst gemacht hast, sollte eine Umsetzung auf 3D eigentlich nicht soo schwierig sein. Prinzip ist das selbe, nur halt ne Dimension mehr. Und die Prüfung nach innen und außen...



  • Die Delaunay-Triangulierung ist aber eine Triangulierung der konvexen Hülle. Unter Umständen kommt dabei was anderes raus als man sich erhofft. Man müsste also nachher noch erkennen können, welches der Tetraeder zu dem Körper gehört und welches nicht.



  • Kannst Du effizient prüfen, ob ein Punkte im inneren des Körpers liegt?
    Dann schlage ich folgenden Monte-Carlo-Algorithmus vor:

    Berechne eine Boundingbox Deines Objekts (am einfachsten achsparallel). Da wirfste zufällige Punkte rein und prüfst welcher Anteil drin liegt. Diesen Anteil hat auch das Volumen des Körpers am Volumen der Boundingbox.

    Vorteil: Einfach zu implementieren und man kann Genauigkeit gegen Geschwindigkeit tauschen.

    Nachteil: Nicht exakt. Langsam bei großen Samples. Nur wahrscheinlich korrekts Ergebnis.



  • V(K):=_Xχ_KV(K) := \int\_X \chi\_{K}



  • Mathematisch ist das klar. Wir diskutieren ja gerade über eine effiziente Auswertung dieses Integrals. 🙂


Log in to reply