Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Spiegelung ohne Winkelberechnung
BenBE - Mo 27.06.05 18:34
Titel: Spiegelung ohne Winkelberechnung
Ich hab mal eine Frage bzgl. der Berechnung von 3D-Vektoren bei Spiegelungen.
Angenommen, ich hab einen Normalenvektor N einer Ebene (konkrete Ebene uninteressant). Nun möchte ich wissen, wie (Richtungsvektor) ein Vektor A an dieser Ebene gespiegelt wird.
Als Vereinfachung könnt ihr euch Vorstellen alles liegt im Koordinatenursprung.
Ich möchte für die Berechnung des gespiegelten Vektors A' KEINE Winkelfunktionen benutzen; einfach nur reine Vektorberechnungen.
TIA,
BenBE.
P.S.: Falls Ihr noch was an Angaben braucht, einfach bescheidgeben.
opfer.der.genauigkeit - Mo 27.06.05 18:37
Ich weiß zwar, daß ich in Mathe noch n erheblichen Nachholbedarf habe,
aber reicht es nicht die Koordinatenwerte mal - 1 zu nehmen um den Spiegelvektor zu erhalten?
BenBE - Mo 27.06.05 19:25
Achtung: Berechnungen im 3D-Raum.
Kleines Beispiel:
Für N=(0,0,1) und A=(1,1,2) wäre der gespiegelte Vektor A'=(1,1,-2).
Probleme gibt es nun, wenn N keine der Koordinatenachsen darstellt, also z.B. N=(0.23,0.77,0.52).
opfer.der.genauigkeit - Mo 27.06.05 19:37
Wahrscheinlich versteh ich grad nicht worauf du hinaus möchtest.
Wann ein Vektor (1, 1, 2) im dreidimensionalen Raum gespiegelt wird, dann wären
seine gespiegelten Koordinaten (-1, -1, -2) oder seh ich das falsch?
Oder meinst du mit Spiegel z.b. an einer prallelen Achse gespiegelt?
Ich glaube, das einfachste wäre danach zu googln ;)
delfiphan - Mo 27.06.05 19:42
Wie ist die Ebene gegeben?
Ist die Ebene ein Unterraum oder ein affiner Unterraum (Ursprung in der Ebene enthalten oder nicht).
z.B. so, wenn die Ebene durch zwei aufspannende Vektoren gegeben ist:
Vektor auf Ebene projizieren, diesen Vektor * 2 minus ursprünglicher Vektor.
BenBE - Mo 27.06.05 19:44
Spiegelung an Ebene
Diese ist gegeben durch O(0,0,0) und Normalenvektor N dieser Ebene.
delfiphan - Mo 27.06.05 19:53
v = Vektor
n = Normale (der Länge 1)
w = (an Unterraum senkrecht zu n) gespiegelter Vektor
w erhält man (man zeichne es sich auf), indem man v auf n projiziert, und diesen Vektor 2x vom ursprünglichen Vektor v abzieht:
w = v-2*(v*n)*n (Multiplikationen zwischen Vektoren sind Skalarprodukte)
^
|___v
n| /|
| / |
|/ |
--O---+------- Ebene
\ |
\ |
\|
w
Wenn du mehrere Vektoren spiegeln musst, kannst du dir auch eine Spiegelungsmatrix
M bauen:
M = 1-2*(n*n')/(n'*n) falls
n nicht normiert ist
bzw.
M = 1-2*(n*n') falls
n normiert ist.
( ' = Transponierte, 1 = Einheitsmatrix)
Dann gilt: w = M*v
Die "Matrixformel" folgt aus der Formel ganz oben, wenn du dort die Einheitsvektoren einsetzst und diese dann wieder ein eine Matrix schreibst (umgekehrte Koordinatentransformation), und diese Matrix dann invertierst (jedoch ist hier die Inverse gerade gleich der Matrix selbst; da zweimal spiegeln so viel wie gar nicht spiegeln ist)
Das ganze funktioniert für beliebige Dimensionen.
Siehe auch
meine Zusammenfassung [
http://www.tyberis.com/download/special.pdf] auf Seite 35.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!