G
So, ich hab inzwischen alles implementiert, getestet und für korrekt befunden. Insofern werde ich mal mein neu erworbenes Wissen teilen, falls jemand mal etwas ähnliches braucht. Es ist auf jeden Fall hilfreich, wenn man eine gute Vektorbibliothek in der Hinterhand hat, damit man den ganzen Quark wie Ebenen, Schnittpunkte etc. nicht erst selbst implementieren muss.
Bei der Berechnung gibt es grundsätzlich drei verschiedene Fälle zu unterscheiden (vgl. auch meine Screenshots im ersten Post).
Fall 1: Die z-Ebene liegt über allen Punkten des Dreiecks, womit ein schräg abgeschnittenes Prisma entsteht. Hier haben wir es noch einfach und nehmen die Formel: V=AGa⋅b⋅c3V=AG \frac{a \cdot b \cdot c}{3}V=AG3a⋅b⋅c
AG ist hierbei die Grundfläche des Dreiecks und a, b, c sind die Kantenlängen des Prismas.
Fall 2: Die z-Ebene schneidet das Dreieck so, dass nur eine Koordinate des Dreiecks niedriger als die z-Ebene ist. Als erstes sind die Schnittkoordinaten der Dreieckskanten mit der Ebene zu berechnen. Dadurch erhält man eine Dachfläche. Das Volumen zwischen der Basisfläche und der Dachfläche lässt sich berechnen, wenn man sich den Körper als Pyramide vorstellt, die auf dem Kopf steht. Die Dachfläche ist die Grundfläche AG und der tiefste Punkte der Basisfläche ist die Pyramidenspitze. Also einfach mit der Volumenformel für Pyramiden rechnen: V=13⋅AG⋅hV= \frac{ 1 }{3} \cdot AG \cdot hV=31⋅AG⋅h
Fall 3: Die z-Ebene schneidet das Dreieck so, dass zwei Koordinaten des Dreiecks niedriger als die z-Ebene sind. Als erstes sind erneut die Schnittkoordinaten der Dreieckskanten mit der Ebene zu berechnen. Dadurch erhält man hier eine viereckige Basis- sowie Dachfläche. Dieser Körper ist aber unregelmäßig und ich habe keine feste Formel gefunden, um das Volumen zu berechnen. Stattdessen muss der Körper in zwei Pyramiden geteilt werden, deren Volumen schließlich addiert wird. Der Einfachheit halber gehen wir kurz davon aus, dass die Koordinaten der Basisfläche v1, v2, v3 und v4 heißen. Die Koordinaten der Dachfläche sind v1_, v2_, v3_ und v4_. Die Koordinaten v2 und v3 sind die Schnittkoordinaten mit der Ebene.
Die Grundfläche der ersten Pyramide wird durch v1, v3 und v1_ definiert. Die Spitze der Pyramide ist v2. Es ist also die Grundfläche zu berechnen sowie die Höhe der Pyramide. Ersteres ist aus den vorherigen Beispielen bekannt, letzteres erreicht man, indem man über v1, v3 und v1_ eine Ebene aufstellt und den Abstand zu v2 ermittelt. Ab hier gilt die gleiche Formel wie in Fall 2.
Die Grundfläche der zweiten Pyramide wird durch v1, v1_ v4_ und v4 definiert. Entweder man rechnet die Fläche des Polygons aus oder man behilft sich, indem man aus dem Viereck einfach zwei Dreiecke macht und deren Flächen addiert. Das erste Dreieck ist dann v1, v4_ und v1_ und das zweite Dreieck v1, v4 und v4_. Die Spitze dieser Pyramide ist v3 und genau wie bei der ersten Pyramide muss zur Ermittlung der Pyramidenhöhe eine Ebene auf Basis von v1, v4 und v1_ erstellt werden, um den Abstand von Punkt v3 zu ermitteln. Sobald man diese Werte ermittelt hat, gilt auch hier die gleiche Formel wie in Fall 2.
Dann einfach die Volumina addieren und man hat es.
Falls noch jemand einen Tipp hat, wie man den Fall 3 einfacher handeln kann, immer her damit. Ansonsten danke nochmal an alle