Volumen "oberhalb" eines Dreiecks (schräg abgeschnittenes Prisma) berechnen
-
Hi,
im Titel habe ich es schon etwas umständlich beschrieben: ich suche nach einer Möglichkeit, das Volumen "oberhalb" eines Dreiecks/Polygons im 3D-Raum zu berechnen. Soweit ich das bisher recherchiert habe, suche ich also nach dem Volumen eines schräg abgeschnittenen Prismas.
Der Hintergrund ist die Berechnung des Volumens einer Vertiefung im Gelände (z.B. ein Tal etc.), welches modelltechnisch aus Dreiecken besteht. Da es wohl kaum eine feststehende Formel für solche Körper gibt, war meine Idee, es über die Volumina der einzelnen Dreiecke zu machen, in dem auf einer gewissen z-Höhe eine imaginäre Ebene eingezogen wird und diese als obere Begrenzung dient, womit ich ein Volumen berechnen und schließlich über alle Dreiecke aufsummieren könnte.
Zur besseren Veranschaulichung habe ich einige Bilder gemacht. Ein Dreiecksmodell sieht ganz vereinfacht so aus:
2D-Ansicht: https://i.imgsafe.org/1d16075.png
3D-Ansicht: https://i.imgsafe.org/1e0ebbb.pngFür die Volumenberechnung an sich habe ich ja im Prinzip zwei Fälle zu unterscheiden (denke ich):
- Erstens: Die imaginäre Ebene (im Bild lila) ist gleich hoch oder höher wie die höchste Koordinate des Dreiecks (im Bild grün): https://i.imgsafe.org/0909338.png
- Zweitens: Die imaginäre Höhe ist irgendwo zwischen der niedrigsten und höchsten Koordinate des Dreiecks (im Bild grün, Schnittkante rot):
https://i.imgsafe.org/1b1c8eb.png Unter Umständen ergibt sich auch ein so ein Körper: https://i.imgsafe.org/1c3567a.png
Was ich habe, sind die Koordinaten der Dreiecke sowie das Wissen, auf welcher z-Höhe ich die Ebene einziehen muss. Was auch kein Problem ist, ist die Berechnung der Schnittkante für den Fall zwei. Nur wie gehe ich an die Berechnung des Volumens ran? Ich habe zwar schon im Internet rumgesucht, aber bisher bin ich nicht wirklich weitergekommen, deshalb wende ich mich mal an euch um zu schauen, ob meine Idee realisierbar und gut ist, wie man sie umsetzen kann oder ob ich es ganz anders machen sollte.
Ich bedanke mich schon mal vorab!
Viele Grüße,
GPC
-
Das Volumen einer Pyramide ist 1/3 * Grundfläche * Höhe. Du musst also lediglich die Schnittfläche ausrechnen und den Abstand der Pyramidenspitze von der Ebene, in der die Grundfläche liegt ausrechnen.
-
Jester schrieb:
Das Volumen einer Pyramide ist 1/3 * Grundfläche * Höhe. Du musst also lediglich die Schnittfläche ausrechnen und den Abstand der Pyramidenspitze von der Ebene, in der die Grundfläche liegt ausrechnen.
So wie ich Gregor verstanden habe, möchte er aber nicht nur pyramiden(-stumpf)förmige Täler ausrechnen, sondern ganz allgemeine Formen. Was ist etwa, wenn es eine prismaförmige Rinne gibt?
Edit: Der Pyramidenstumpf schließt den Fall des Prismas und der Pyramide ein. Eine Formel findet sich ja hier. Trotzdem muss die zwischen Grundfläche (bzw. Spitze) und Deckfläche eingeschlossene Form kein Pyramiden(stumpf) sein. Im Falle eines Prismas müsste man auch erst einmal identifizieren, was Grund- und Mantelflächen sind.
-
Jester schrieb:
Das Volumen einer Pyramide ist 1/3 * Grundfläche * Höhe. Du musst also lediglich die Schnittfläche ausrechnen und den Abstand der Pyramidenspitze von der Ebene, in der die Grundfläche liegt ausrechnen.
Womöglich stehe ich auf dem Schlauch, aber ich sehe eigentlich keine pyramidenförmigen Objekte Wenn, dann einen Pyramidenstumpf, aber auch das passt doch eig. nicht, da ja die Grund- und Dachfläche nicht parallel sind. Oder?
Jodocus schrieb:
Edit: Der Pyramidenstumpf schließt den Fall des Prismas und der Pyramide ein. Eine Formel findet sich ja hier. Trotzdem muss die zwischen Grundfläche (bzw. Spitze) und Deckfläche eingeschlossene Form kein Pyramiden(stumpf) sein. Im Falle eines Prismas müsste man auch erst einmal identifizieren, was Grund- und Mantelflächen sind.
Es ist (mir) immer klar, was Grundfläche ist, denn das ist das vorgegebene Dreieck. Darauf konstruiere ich (imaginär) die Dach- und Mantelflächen. In den Bildern ist die Grundfläche immer grün und die anderen Flächen transparent weiß.
-
GPC schrieb:
Jester schrieb:
Das Volumen einer Pyramide ist 1/3 * Grundfläche * Höhe. Du musst also lediglich die Schnittfläche ausrechnen und den Abstand der Pyramidenspitze von der Ebene, in der die Grundfläche liegt ausrechnen.
Womöglich stehe ich auf dem Schlauch, aber ich sehe eigentlich keine pyramidenförmigen Objekte Wenn, dann einen Pyramidenstumpf, aber auch das passt doch eig. nicht, da ja die Grund- und Dachfläche nicht parallel sind. Oder?
Sorry, war in Eile, daher etwas knapp. Das Volumen eines schräg abgeschnittenen Pyramidenstumpfs lässt sich offensichtlich als Differenz des Volumens der Pyramide und des Volumens des Teiles, der abgeschnitten wird, berechnen. Die zentrale Beobachtung ist, dass der Teil, der abgeschnitten wird eben auch wieder eine Pyramide ist, und für die gilt natürlich auch wieder die entsprechende Formel.
-
Hier wird darüber diskutiert. Die Lösung scheint einfach zu sein: . Wobei G die Grundfläche des Dreiecks ist, welche durch dein zweites Dreick gegeben ist und a, b und c sind die Abstände der einzelnen Ecken der Dreiecke.
-
Danke für den Input soweit und insbesondere für den Link. Das schaut interessant aus. Ich werde das am Montag mal durchprobieren, ob ich damit zum Ziel komme
-
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:
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:
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