Schnittpunkt einer Geraden mit einer Fläche
-
Hallo. ich Programmiere grade eine 3D-Engine und um meinen z-Buffer mit Daten füllen zu können müsste ich folgendes Wissen:
Ich habe eine Gerade durch 2 gegebene Punkte. Diese Gerade schneidet eine Dreiecksfläche deren Eckpunkte mir bekannt sind. Jetzt bräuchte ich die Koordinaten des Schnittpunktes der Geraden mir der Fläche (die Gerade schneidet die Fläche in jedem Fall, dafür habe ich bereits gesorgt).
Für denn Fall, dass jemand da ne Idee hat und ne Formel zusammenbastelt: Der eine Punkt der Geraden ist der Koordinatenursprung, also (0, 0, 0). Vielleicht vereinfacht das das Ganze ein wenig.
-
es sei $ n $ - die Ebenennormale\ ein
beliebiger Punkt\ dann kann man die Ebene als $ n^{T}p+d=0$
darstellen.\ f"ur gild weiterhin, mit als Richtungsvektor
der Grade, . Eingesetzt ausgeschrieben\
$t*n_{x}*r_{x}+t*n_{y}*r_{y}+t*n_{z}*r_{z}+d=0 \\ t*\left( n_{x}*r_{x}+n_{y}*r_{y}+n_{z}*r_{z}\right)+d=0\\ t=-d/\left( n_{x}*r_{x}+n_{y}*r_{y}+n_{z}*r_{z}\right)\\ t=-d/\left( n^{T}r\right)\\$
-
Hä? Kapier ich ned. Was sind T und t und d?
-
$n^{T}p$ ist das Scalarprodukt von $n$ mit $p$\\ $ \frac{d}{\left|n\right|}$ ist der Abstand vom Ursprung und dem Durchstosspunkt der Grade, welche durch den Ursprung mit Richtung $n$ Die Ebene schneidet.\\ $t$ ist einfach ein faktor. aus der Grdengleichung $P=P_{0}+t*r$
-
Ganz kapier ich's immer noch nicht.
Ein Scalarprodukt ist doch das Produkt zweier Vektoren, oder?
Du hast geschrieben n ist die Ebenennormale (Was ist das? Ich find nix brauchbares), und p ein Punkt. Wie erstellt man daraus ein Scalarprodukt?Die Geradengleichung hab ich glaub ich verstanden. Also P0 ist ein Punkt auf der Geraden und r der Vektor, der die Richtung der Geraden angibt. t funktioniert dann wie x bei einer Funktion.
In meinem Fall also vom Ursprung aus, d.h. die Gleichung vereinfacht sich auf P=r*t, Also ist t=P/r.Jetzt will ich ja aber nicht wissen, bei welchem Vielfachen des Vektors der Geraden der Schnittpunkt ist, sondern einfach nur die Länge der Geraden |Ursprung Schnittpunkt|, die ich mir ja mit den 3 Koordinaten des Schnittpunktes ganz einfach ausrechenen kann, nämlich √x² + y² + z², oder die d/|n| ist, wie du geschrieben hast.
n war die Ebenennormale (Was immer das ist und wie nimmt man davon den Betrag?) und d weiß ich immer noch nicht.
Noch was: Wie gebe ich eine Ebene an, wenn ich weiß, dass die drei Punkte P1, P2 und P3 auf ihr liegen (bzw. sie begrenzen, das ist ja ziemlich das Selbe)?
-
Für jede Ebene gibt es einen Vektor, der senkrecht auf ihr steht. Senkrecht und normal sind Synonyme, wobei Mathematiker lieber "normal" sagen.
Eine Ebene kann man als "a*x + b*y + c*z + d = 0" darstellen. Der Vektor (a, b, c) ist die Ebenennormale (wobei man oft noch die Zusatzbedingung hat, dass er die Länge 1 hat)
Ein Punkt und ein Vektor sind eigentlich dasselbe: ein Tuppel von n (in diesem Fall 3) Zahlen. Also kann man Punkte wie Vektoren behandeln (vergiss einfach mal, was du in der Schule gelernt hast...)
-
Die Punkte liegen nicht auf einer Graden\
es bezeichne das Kreuzprodukt von mit \
Es ergibt sich \ als senkrecht zu und (Vektoren die con nach und nach gehn)\
hier ist aber nicht eindeutig, da es bis auf einen Faktor definiert ist, dies wird "uberwunden durch die normierung auf L"ange \
nun kann aber immer noch mit dem faktor multipliziert werden und erf"ullt immer noch die Normiertheit.(Reihenfolge des Kreuzprodukts entscheidet hier)\
Dies f"uhrt dazu, dass eine "aquivalente Schreibweise f"ur die selbe Ebene ist.\
des weiteren gild f"ur jeden Punkt P in der Ebene, dass (Hesse Normal Form) ist, dies gild auch f"ur da das noch unbestimmt ist kann man in einsetzen und somit , bestimmen.\die oben beschriebene Formel erm"oglicht es mit dem Faktor den Schnittpunkt Grade/Ebene zu bestimmen.\
$
$
\left(
\begin{array}{c} P_{x}\ P_{y}\ P_{z}\end{array}\right)=t*\left(\begin{array}{c} r_{x}\ r_{y}\ r_{z}\end{array}
\right)