Schneidet eine Gerade eine Fläche?

Neue Frage »

JonasRu Auf diesen Beitrag antworten »
Schneidet eine Gerade eine Fläche?
Edit opi: "Linie" durch "Gerade" im Titel ersetzt.


Meine Frage:
Hallo liebe Matheprofis,
ich bin gerade dabei mich ein bisschen in die 3D-Programmierung einzulernen. Dafür muss ich den Schnittpunkt einer Linie und einer Fläche, die durch eine Ebene darstellbar und durch 4 Punkte begrenzt ist, wissen. Wie kann ich da vorgehen? Den Schnittpunkt der Linie mit der Ebene kann ich schon berechnen, doch wenn ich diesen habe, wie kann ich dann ausrechnen, ob sich dieser bzw. wo sich dieser auf der Fläche, die ja durch die 4 Punkte begrenzt ist, befindet. Kann mir da einer helfen?

Meine Ideen:
Den Schnittpunkt Ebene-Linie rechnen ich folgendermaßen aus:

Ausgehend davon, dass die Ebene und die Linie in folgender Form vorliegen:
Ebene: ax + by + cz = d
Line: (x1/y1/z1)+r*(x2/y2/z2)

Dann ist r, also der Punkt, an dem sich beide Treffen. Diesen errechne ich folgendermaßen:

r = -(c*z1+b*y1+a*x1-d)/(c*z2+b*y2+a*x2)

Setze diese in die Linien-Formel ein und erhalte den Schnittpunkt-Vektor:
Schnittpunkt = Richtungsvektor*r + positionsvektor

Doch wie kann ich nun wissen, ob dieser Schnittpunkt sich auch in der, durch die Punkte begrenzte, Fläche befindet?

Ich freue mich über jeden Tipp und jede Hilfe! =)
JonasRu Auf diesen Beitrag antworten »

Anstatt Linie meine ich natürlich "Gerade", sorry!
opi Auf diesen Beitrag antworten »

Ist denn über das Viereck näheres bekannt, ist es vielleicht ein Parallelogramm?

Ein allgemeinenes Viereck ABCD kannst Du in zwei Dreiecke zerlegen und prüfen, ob der Schnittpunkt S in einem der Dreiecke liegt.
Die Dreiecksprobe ist etwas aufwendig:
Du mußt eine Gleichung aufstellen und prüfen, of die nachfolgenden Bedingungen erfüllt sind.


Bei einem Parallelogramm ist's etwas einfacher, über den Grund darfst Du Dir selbst Gedanken machen. smile
Eine zeichnerische Lösung mit Bleistift und Papier ist auch möglich und geht vielleicht sogar am schnellsten. Augenzwinkern
JonasRu Auf diesen Beitrag antworten »

Also die Punkte verbinden sich zu einem Rechteck.

Die beiden Spann-Vektoren der Ebene setzen genau an einem der Punkte an. Also kann ich einfach den Schnittpunkt mit der Ebene gleichsetzen und gucken, ob 0<s<1 und 0<r<1, wenn ja, dann liegt der Schnittpunkt in der Fläche.

Wenn die Ebene in dieser Form vorliegt:
(a1, b1, c1) + r*(a2, b2, c2) + s*(a3, b3, c3)

Und der Schnittpunkt in dieser Form:
(x, y, z)

Dann ist
s =-((b2 - a2) * x - a1*b2 + a2*b1) / (a2*b3 - a3*b2)

und
r = (x-a3*s-a1)/a2

Ist das so richtig?
opi Auf diesen Beitrag antworten »

Die Formel für s stimmt nicht, Du hast anscheinend anstelle y ein zweites Mal x in das LGS eingesetzt.

Wenn die Ebenengleichung sowieso schon in Paramaterform vorliegt, kannst Du allerdings auch gleich Ebene und Gerade (die dann und sowieso aber einen anderen Parameter benötigt) gleichsetzen. Ob dieser direkte Weg einfacher zu programmieren ist, vermag ich nicht zu sagen.
Zitat:
0<s<1 und 0<r<1

Jeweils "kleiner gleich".
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »