Abstand Punkt-Ebene |
22.09.2011, 22:45 | AMD | Auf diesen Beitrag antworten » | ||||
Abstand Punkt-Ebene Hall Ich befasse mich in der Uni zurzeit mit 3d Programmierung und das hat natürlich mehr mit Mathe zutun als mir manchmal lieb ist Ich muss für eine bestimmte Sache den Abstand eines Punktes von einer Ebene bestimmen. Dabei geht es um den kürzesten Weg zur Ebene (logisch) und ich muss den Schnittpunkt ermitteln! Also die Koordinaten davon kennen. Soweit sogut! Das gehe ich wiefolgt an: Meine Ideen: Ich habe meine Punkte A,B,C mit jeweils x, y, z Koordinate, welche ein Dreieck darstellen und meine Position welche ich jetzt mal K nenne. A nehme ich als Stützvektor und dann noch den Vektor AB und AC erstellen. Mithilfe dieser Werte erstelle ich mir die Ebene! Das rechne ich mit dem Kreuzprodukt aus. Dadurch habe ich quasi folgendes: x1 + x2 + x3 = b Fehlt also erstmal noch b! Dazu einfach den Stützvektor A in e einsetzen und schon hat man b Jetzt rechne ich noch den Faktor t aus! Als Beispiel mal nur für die X-Achse: t = (b - (Kx * x1)) / x1; Dann als Beispiel Wurzel aus t*t und tada, Abstand von K.x zur Ebene.x Das die selbe Operation auch für Y und Z durchgeführt ist klar! Dies klappt in vielen Fällen auch ganz gut! Dazu habe ich mal eben eine Grafik in Paint gemacht! Wie man sieht funktioniert das super, wenn sich die Punkte Orthogonal "gegenüber" stehen. Ist dies nicht mehr der Fall bricht alles in sich zusammen. Mir kam die Idee, dass der Einheitsvektor etwas damit zutun haben könnte/wird, da dieser immer Orthogonal steht. Daher habe ich mal etwas rumprobiert damit mit folgendes Ergebnis: Erstmal den Betrag der ebene berechnen Wurzel(x1² + x2² + x3²), dann jeweils x1/betrag, x2/betrag, x3/betrag. Das sollten die Einheitsvektoren sein. Ich habe nun die Flächen untersucht die "gerade" sind bzw. "schräg". Bei gerade Flächen kommen halt mal Sachen wie 1,0,0 oder 0,1,0, etc. Bei den schrägen Flächen hingegen 0, 0.87, 0 etc. Dadurch konnte ich mal den Winkel bestimmen... also arccos(0,87)*(180/Pi) Klappt super und es kommt dann z.B. auch ein Winkel von 30° bei mir raus, was optisch ganz gut passt Und da ich nun langsam zum ende kommen will und hoffe ich alles erwähnt habe: Was muss ich nun machen, damit auch schräge Flächen richtig mit einbezogen werden und ich den richtigen Abstand kenne? MfG und schonmal danke für die Hilfe |
||||||
22.09.2011, 22:56 | AMD | Auf diesen Beitrag antworten » | ||||
Ahja: Das mit 0,87 war nur ein Zahlenbeispiel und soll nicht die 30° entsprechen Und die *(180/Pi) weil der "PC" nicht in deg rechnet Edit// Sorry hätte Beitrag ja auch editieren können |
||||||
22.09.2011, 23:51 | opi | Auf diesen Beitrag antworten » | ||||
Die Idee, eine Ebenengleichung der Form aufzustellen, ist schon einmal gut. Danach wird es etwas umständlich bzw. falsch. Wenn Du nur den Abstand eines Punktes von der Ebene benötigst, empfehle ich die Hessesche Normalenform, sie läßt sich sicherlich auch leicht programmieren. Solltest Du auch den Lotfußpunkt (=Punkt der Ebene mit minimalen Anstand zum gegebenen Punkt) suchen, kannst Du eine Geradengleichung aus Deinem Punkt und dem Normalenvektor der Ebene als Richtungsvektor der Geraden aufstellen, anschließend den Schnittpunkt mit der Ebene bestimmen.
Zu den Benennungen: Ein Einheitsvektor hat die Länge eins. Ein Normalenvektor steht senkrecht zu seiner Ebene. Ein Normaleneinheitsvektor (normierter Normalenvektor) vereinigt beide Eigenschaften. |
||||||
23.09.2011, 00:55 | AMD | Auf diesen Beitrag antworten » | ||||
Hm irgendetwas klappt da nicht so ganz. Ich habe jetzt wie gesagt meine Ebene mit dem Kreuzprodukt aufgestellt und dann noch b mithilfe von Ex * Ax + Ey * Ay + Ez * Az E = Ebene A = Stützvektor Durch Ex, Ey und Ez erstelle ich nun den Normalenvektor: Wurzel(Ex² + Ey² + Ez²) Habe also: (Ex + Ey + Ez + b) / Normalenvektor Dann sollte ich doch bei Ex, Ey, Ez nur noch den Punkt Px, Py, Pz einsetzen, ausrechnen und fertig oder? Das klappt nur leider nicht |
||||||
23.09.2011, 01:29 | opi | Auf diesen Beitrag antworten » | ||||
Der Normalenvektor der Ebene ist der muß nicht extra berechnet werden.
Damit bestimmst Du den Betrag des Normalenvektors. Dieser Betrag wird für die Hessesche Normalenform benötigt.
Ich habe einige Ergänzungen/Fehlerkorrekturen eingefügt. Meine Empfehlung: Schreib ein Zahlenbeispiel mit Rechenweg, dann kann ich sehen, wo es klemmt. |
||||||
23.09.2011, 02:13 | AMD | Auf diesen Beitrag antworten » | ||||
Okay dann mach ich das mal Ich geb schonmal zu, dass es teilweise komische Werte sind aber das ist ja eigentlich kein Grund warum es nicht gehen sollte! A(-87|-84|31) B(-67|-84|31) C(-67|-66|1) A = Stützvektor AB = B-A = (20|0|0) AC = C-A = (20|18|-30) Wäre das geschafft. Ebene mit Kreuzprodukt: ex = (0 * (-30)) - (0 * 18) = 0 ey = (0 * 20) - (20 * -30) = -600 ez = (20 * 18) - (0 * 20) = 360 Noch schnell b berechnen: b = ex * Ax + ey * Ay + ez + Az = 0 * (-87) + (-600) * (-84) + 360 * 31 = 61560 Nun der Betrag des Normalenvektors n-Betrag = Wurzel(ex² + ey² + ez²) = Wurzel(0 + 360000 + 129600) = 699,71422 Damit dürften alle Grundlegenden Sachen gelegenden Dinge vorhanden sein! Nun noch meinen Punkt P eintragen! P(-72|-31| 25) d = (ex * Px + ey * Py + ez * Pz + b) / n-Betrag d = (0 * (-72) + (-600) * (-31) + 360 * 25 + 699,71422 Oh Gott, ich seh den Fehler selber! Ich habe immer +b und nicht -b gemacht Nun klappt es! Aber trotzdem dankeschön für die gute Hilfe |
||||||
Anzeige | ||||||
|
||||||
23.09.2011, 02:53 | opi | Auf diesen Beitrag antworten » | ||||
Um Missverständnisse zu vermeiden:
Ein Schreib- /Verwechselungsfehler? |
||||||
23.09.2011, 13:30 | AMD | Auf diesen Beitrag antworten » | ||||
Mein Fehler war ja eben, dass ich + b gerechnet habe! Ich rechne nun natürlich mit - b und das klappt super |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
Die Neuesten » |