Abstand Punkt-Ebene

Neue Frage »

AMD Auf diesen Beitrag antworten »
Abstand Punkt-Ebene
Meine Frage:
Hall smile

Ich befasse mich in der Uni zurzeit mit 3d Programmierung und das hat natürlich mehr mit Mathe zutun als mir manchmal lieb ist Augenzwinkern

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 smile

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 smile

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 smile
AMD Auf diesen Beitrag antworten »

Ahja: Das mit 0,87 war nur ein Zahlenbeispiel und soll nicht die 30° entsprechen Augenzwinkern
Und die *(180/Pi) weil der "PC" nicht in deg rechnet

Wink

Edit// Sorry hätte Beitrag ja auch editieren können
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.


Zitat:
Mir kam die Idee, dass der Einheitsvektor etwas damit zutun haben könnte/wird, da dieser immer Orthogonal steht.

Zu den Benennungen:
Ein Einheitsvektor hat die Länge eins.
Ein Normalenvektor steht senkrecht zu seiner Ebene.
Ein Normaleneinheitsvektor (normierter Normalenvektor) vereinigt beide Eigenschaften.
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 verwirrt
opi Auf diesen Beitrag antworten »

Der Normalenvektor der Ebene
ist
der muß nicht extra berechnet werden.

Zitat:
Wurzel(Ex² + Ey² + Ez²)

Damit bestimmst Du den Betrag des Normalenvektors. Dieser Betrag wird für die Hessesche Normalenform benötigt.

Zitat:
Habe also:
(Ex*px + Ey*py + Ez*pz - b) / Betrag des Normalenvektors

Ich habe einige Ergänzungen/Fehlerkorrekturen eingefügt.

Meine Empfehlung: Schreib ein Zahlenbeispiel mit Rechenweg, dann kann ich sehen, wo es klemmt.
AMD Auf diesen Beitrag antworten »

Okay dann mach ich das mal Freude
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 Augenzwinkern
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 Hammer

Nun klappt es! Aber trotzdem dankeschön für die gute Hilfe smile
 
 
opi Auf diesen Beitrag antworten »

Um Missverständnisse zu vermeiden:

Zitat:
d = (ex * Px + ey * Py + ez * Pz - b) / n-Betrag
Bitte weiterhin das rote Minus beachten.

Zitat:
d = (0 * (-72) + (-600) * (-31) + 360 * 25 + 699,71422


Ein Schreib- /Verwechselungsfehler? verwirrt

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 Freude
Neue Frage »
Antworten »



Verwandte Themen

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