Ebenen
-
Hi!
Häufig wird ja die Darstellungsform einer Ebene so gewählt:
ax + by + cz + d = 0(a b c) ist der Normalvektor der Ebene und d die Distanz. Anscheinend kann ich über die Parameter x, y und z jeden Punkt erreiechen auf der Ebene, aber warum = 0 und wie wird die Distanz dazu berechnet?
Wie berechne ich denn ein Punkt mit z. B. x=2, y=3 und z=0.5 ?
Ich möchte daraus mal selber eine Formel ableiten, wie ich den Schnittpunkt zwischen einer Ebene und einem Strahl berechnen kann, dazu muss ich aber wissen, wie jeder Punkt auf so einer Ebene erreicht werden kann.
mfg olli
-
Vertex schrieb:
Wie berechne ich denn ein Punkt mit z. B. x=2, y=3 und z=0.5 ?
Das ist ja schon von der Grundidee her völlig sinnfrei. Du willst einen Punkt "berechnen" den du dir selbst schon vorgibst? Was soll das bringen?
Da kannst du bestenfalls prüfen, ob dieser Punkt Teil der Ebene ist oder nicht.
-
x, y und z sind wie gesagt nur Parameter. Ist wie beim Strahl
S + t*D mit S als Startvektor, D als normalisierter Richtungsvektor und t als Parameter. Über t kann ich jeden Punkt auf dem Strahl ausrechnen. Wie funktioniert das nun bei einer Ebene?
mfg olli
-
Vertex schrieb:
x, y und z sind wie gesagt nur Parameter.
Wenn du einfach eine andere Darstellung der Ebene haben willst, um über 2 Parameter alle Punkte zu erreichen, dann such dir einen Punkt der Ebene und 2 linear unabhängige Vektoren, die senkrecht zu deinem Normalenvektor stehen. Dann hast du r = r0 + a*u + b*v mit a und b als Parameter und u, v als Richtungsvektoren.
-
Sorry, habe jetzt nochmal in einem anderen Tutorial:
http://www.geometrictools.com/Documentation/ClipMesh.pdf
Gerade herausgefunden, dass x, y und z doch die Punktkoordinaten sind.Aber warum ist ax + by + bz + d = 0? Bzw. warum ist ax + by + bz + d die Distanz des Punktes (X Y Z) ? Das wird leider immer bei vielen Tutorials einfach als gegeben gesehen.
mfg olli
-
Aber warum ist ax + by + bz + d = 0?
Öh, wieso denn nicht? Ausserdem meinst du sicherlich ax + by + cz + d = 0.
Die Herleitung der KO-Gleichung kann ja aus der Parameterform erfolgen:
Dort hast du eine Ebene gegeben durch einen Stützvektor und zwei Richtungsvektoren gegeben. Über den Normalenvektor der Ebene(d.h. dem Vektor, der orthogonal auf beiden Richtungsvektoren liegt) kannst du dir nun auch die Koordinatenform herleiten, da gilt:
n*(x-a) = 0
n ist der Normalenvektor, x ein beliebiger Punkt der Ebene und a ein "bekannter" Punkt der Ebene. Die Gleichung besagt nur, dass der Normalenvektor orthogonal auf der Strecke AX(die Element der Ebene ist)liegt. Im Falle der Orthogonalität ist das Skalarprodukt der Vektoren gleich 0.
Aus der Gleichung folgt dann auch:
n1*x1 + n2*x2 + n3*x3 -(n*a) = 0
Das ist die gleiche Form, wie oben mit n1 = a, n2 = b, n3 = c und d = (n*a)(Konstante). Zudem steht da nicht immer " =0" da du eine Konstante im Form von d in der Gleichung hast.
-
OK, danke, habe mir jetzt mal die anderen Darstellungsformen angeguckt bei Wikipedia.
Pfff... Koordinatendarstellung
Hierbei sind x, y und z die Koordinaten im Raum. Mit dieser Ebenengleichung kann man beispielsweise leicht prüfen, ob ein Punkt auf dieser Ebene liegt, in dem man den Punkt P(x,y,z) in diese Gleichung einsetzt. Erfüllt er diese, liegt er auf der Ebene.
Bei a1, a2 und a3 handelt es sich um die Koordinaten eines zur Ebene gehörenden Normalenvektores. Wenn dieser Vektor normiert ist, also der Normaleneinheitsvektor, dann ist b die Distanz entlang der Normalen zum Ursprung. Die Ebene liegt dann in der Hessesche Normalform vor.
Ich stehe jetzt ein wenig auf dem Schlauch...
Gehen wir davon aus, das es ein Punkt P(x y z) gibt sowie einen Normalvektor N mit dem Betrag 1.Warum ergibt P*N (Punktprodukt) die Distanz von P in Bezug auf die Ebene? Ich kenne das Punktprodukt geteilt durch die beiden Beträge der Vektoren als Kosinus des Winkels zwischen beiden Vektoren.
cos(α) = (P*N) / (|P|*|N|); |N| ist ja 1 daraus folt
cos(α) = PN / |P|; mit |P| multipliziert
cos(α)|P| = P*NAber unter cos(α)*|P| kann ich mir jetzt rein garnix vorstellen.
Lässt sich eigentlich aus der Parameterform
auch die Distanz eines Punktes zur Ebene berechnen?mfg olli
Edit:
Habe das nochmal visuell dargestellt: >> Bild <<
Aber dieser eingezeichnete Winkel α ist jedoch nicht der Winkel zwischen N und P sondern sondern 90° - α. Der Betrag |P| ist dann praktisch wie ein Radius.
-
ja, <p,n> ist der abstand vom punkt zur ebene, wenn n normiert ist. und du hast es sogar selbst hergeleitet. dein cos(alpha)||p|| ist doch gerade die laenge der orthogonalen projektion von p auf n.
-
Vertex schrieb:
Lässt sich eigentlich aus der Parameterform
auch die Distanz eines Punktes zur Ebene berechnen?Soweit ich weiß nicht direkt. Aber indirekt natürlich immer, indem man z.B. einfach umformt in Hesse-Form.
-
Vertex schrieb:
Lässt sich eigentlich aus der Parameterform
auch die Distanz eines Punktes zur Ebene berechnen?Nein, warum nicht, weil sie nicht implizit gegeben ist. Da bleibt nur die HNF: Punkt einsetzen -> Abstand bekannt, fertig.
-
Naja, geht im Prinzip schon. Man könnte einen Punkt der Ebene bestimmen, der maximal nah am Punkt ist, dessem Anstand man berechnen möchte. Dazu müßte man den Abstand mal allgemein hinschreiben und dann jeweils nach mü und lambda ableiten und Nullstellen suchen. Das liefert dann den nächsten Punkt auf der Ebene.
-
einfach den punkt auf das normalisierte kreuzprodukt der richtungsvektoren projezieren.
-
PeterTheMaster schrieb:
einfach den punkt auf das normalisierte kreuzprodukt der richtungsvektoren projezieren.
et voila -> HNF
-
exactly. daher der smily.
-
OK, der Ansatz mit dem normalisierten Vektor und dessen Punktprodukt zum Ortsvektor war für mich das entscheidente zum Verständnis.
Hier in hübscher Wordgrafik
>> Intersection <<
Zum berechnen des Schnittpunktes zwischen einer Strecke <P0;P1>(jaja, mit t aus dem Bereich der Reellen Zahlen UND [0;1]) und einer Ebene NQ -d = 0.mfg olli