Vektor an anderem Vektor spiegeln in 2d?

Aufrufe: 1110     Aktiv: 30.06.2021 um 18:25

0

Hallo,

ich hatte ja eine ziemli unklar formulierte Frage zum Thema ballkollisionen geschrieben.

Nach langem Überlegen kann ich nun endlich eins meiner Kernprobleme klar formulieren:

Gegeben ein Vektor a und ein Vektor b.

Können untershcieldich lang sein, unterschiedliche Richtungen haben, Alles egal.

 

Der Einfahcheit halber wollen wir sagen dass wir uns beide Vektoren als Pfeile vorstellen, deren Start im ursprung liegt und die eben in ihre Betreffenden Richtungen zeigen.

Nun kann man ja hingehen und sagen:

Sei a der Richtungsvektor einer Gerade.

Im prinzip wollen wir im Bildchen Sinne den Vektor b an jener Gerade, die durch a vorgegeben wird, spiegeln.

Jenen "Spiegelvektor" hätten wir gerne.

 

Rein mathematisch suchen wir den zweiten Vektor b', der mit a den selben Winkel einschließt wie b, also insofern das Skalarprodukt gleich sein mpsste.

 

Achja, wir sind übrigens in 2d, falls ich das vergas zu erwähnen.

So meine Überlegungen:

Sei  Vektor a=(a1,a2), b=(b1,b2) wie gesagt vorgegeben und der gesuchte Vektor c=(c1,c2).


bekanntlich gilt ja

a*b=cos(alpha)*|a|*|b|

wobei alpha eben der winkel zwischen den vektoren ist.

man könnte auch b*a nehmen, wäre wegen kommutativität genau dasselbe.

nun betrachten wir a*c.

weil c ja der "Spiegelvektor" von b ist, ist |c|=|b|.

Demnach ist |a|*|c| gleich.

Ebenso ist ja der Winkel dazwischen derselbe (wobei ich mir unklar bin ob hier nicht das vorzeichen vom winkel wehcseln müsste oder sowas. aber der cos davon wäre ja wegen achsensymmetrie vom cos wieder dasselbe).

Also letztlich auch cos(alpha) gleich.

nun zu a*c:

a*c=a1*c1+a2*c2

weil ja Alles Andere gleich sein mpüsste, müsste

a*c=a1*c1+a2*c2 =a*b=a1*b1+a2*b2 sein.

Also eine Gleichung mit den 2 unbekannten c1 und c2, eben den komponenten des gesuchten vektors.

Nun könnte ich hingehen, bspw. ein passendes (c1,c2) wählen, dann hingehen, es auf einheitslänge normieren und dann wieder es auf die länge von |b| strecken. ergebnis wäre der gesuchte spiegelvektor.

Das ist aber sehr umständlich und aufwendig.

Insofern wundere ich mich ob es nicht irgendeinen direkteren Weg gibt, unter Kenntnis von a und b jenen Vektor c zu bestimmen.

Schwammig ist mir bekannt dass man einen Vektor "drehen" kann  um einen Winkel (counterclockwise glaube ich) wenn man ihn mit einer bestimmten Matrix multipliziert. könnte ich ergoogeln, wäre nicht das problem.

 

Nur ist da die Sache:

Ich weiß ja nicht wie genau a und b liegen, welcher davon gegenuhrzeigermässig weiter links oder rechts liegt und damit weiß ich nicht ob ich b nun um den doppelten winkel nahc links drehen muss oder nach rechts drehen muss damit er auf der anderen Seite von a landet.

 

So als Beispiel: sei a=(0,1) beschreibt also die y achse.

Nun weiß ich per se ja nicht ob b nach "oben links" zeigt, also bspw. (-1,1), dann müsste er ja um den doppelwinkel im uhrzeigersinn gedreht werden.

zeigte hingegen b nahc unten links bspw. b=(-1,-1), dann müsste b gegen den uhrzeigersinn um den winkel gedreht werden.

 

Das meine ich, dementsprechend müsste ich aj in der rotationsmatrix den positiven oder negativen (doppelten) winkel benutzen.

 

mal ganz daovn ab dass ich zur bestimmung des winkels ja den arccos eines vermutlich krummen zahl benutzen müsste, was auch nicht so cool ist.

Gibts da nicht eine elegante, direktere Methode für das Ganze, die nicht unbedingt über das Skalarprodukt geht? :-)

 

Eine, ebenso langwierige, Idee wäre es auch, b zu zerlegen in einen Vektoranteile der parallel zu a liegt und einen Vektor, der senkrecht zu a liegt.

dann hätte c den selben tangentialvektor und den negativen normalenvektor.

Aber davon habe ich im detial jciht viel ahnung und ershceint mir auch übermässig kompliziert für dowas relativ simples :-(

Diese Frage melden
gefragt

Student, Punkte: 304

 
Kommentar schreiben
3 Antworten
0
Einen Vektor \(v\in \mathbb{R}^2\) spiegelst du an einer Ursprungsgerade mit dem Winkel \(\alpha\) durch Multiplikation \(S\cdot v\), wobei $$S=\begin{pmatrix}\cos 2\alpha&&\sin 2\alpha\\\sin 2\alpha&&-\cos 2\alpha\end{pmatrix}$$die Spiegelmatrix ist.
Diese Antwort melden
geantwortet

Student, Punkte: 10.87K

 

Kommentar schreiben

0
Hi :) 

Da wir hier ja im zweidimensionalem sind, könnte man das ganze eventuell einfach in ein kartesisches Koordinatensytem zeichnen. 

Der Vektor \(\vec{a}=(a_1,a_2)\) (Stelle dir das bitte als Spaltenschreibweise vor) soll in unserem Fall ja vom Urpsrung aus starten. Also liegt die Spitze am Punkt \(A(a_1/a_2)\). 
Die Gerade, von welcher du sprachest, hat also die Gleichung \(y=\frac{a_2}{a_1}*x\). 
Der Vektor \(\vec{b}=(b_1,b_2)\) endet also im Punkt \(B(b_1/b_2\), welchen wir nun an der Geraden spiegeln müssen, um den Endpunkt des gesuchsten Spiegelvektors zu finden. 

Das kennst du sicher aus der Schule, wie man das im R^2 macht.


Ist das eine dich zufriedenstellende Methode? Und hast du noch Fragen?

Viele Grüße
Diese Antwort melden
geantwortet

Student, Punkte: 3.72K

 

Kommentar schreiben

0
Wenn ich dich richtig verstehe, dann denken wir mal kurz über Punkte statt über Vektoren nach. Gegeben zwei Punkte $A,B\in\mathbb R^2$, suchst du den Spiegelpunkt von $B$ an der Geraden $OA$ ($O$ ist der Ursprung). Dein Ansatz mit dem Skalarprodukt ist richtig, und recht viel einfacher wird es auch nicht.

Ich gebe dir noch einen anderen Ansatz, der auch in höheren Dimensionen funktioniert. Stelle die Gleichung der Geraden auf, die durch $B$ geht und senkrecht auf $OA$ steht. (In zwei Dimensionen: Hat $OA$ Steigung $m$, dann hat diese Gerade die Steigung $-\frac1m$, setze also $s(x)=-\frac1mx+t$ und bestimme $t$ durch das Einsetzen von $B$), schneide die beiden Geraden miteinander, sei $S$ der Schnittpunkt. Dann kann $C$ berechnet werden durch $\vec C=\vec S+\vec{BS}=\vec B+2\vec{BS}$.
Diese Antwort melden
geantwortet

Punkte: 11.27K

 

Hallo, der Kommentar gilt gleichermassen auch @derpi-te.

Ich will mich mal am mehrdimensionalen Fall probieren.
Also klar ist mir dass der Normalenvektor n der Geraden eben senkrecht zu a ist:
n*a=0
Nun gibt es aber so verschiedene Normalenvektoren, die radial von der Gerade nahc aussen gehen und nicht zwangsläufig durch den Punkt B gehen.

Um das weiter zu lösen, müsste ich den Lotfußpunkt bestimmen.

Gehe mich mal kurz einlesen wie das nochmal geht.
Abitur ist shcon 10 jahre her, da ist das Gedächtnis nicht mehr ganz so :-)

Melde mich dann wieder
  ─   densch 30.06.2021 um 17:50

In drei Dimensionen kannst du, um den Lotfußpunkt zu bestimmen, die Gerade $\vec X=\vec A\mathbb R$ mit der Ebene $\vec A\circ(X-\vec B)=0$ schneiden. Alternativ gibt es für alle Dimensionen die orthogonale Projektion mit der unmittelbaren Formel $$\vec S=\frac{\vec A\circ\vec B}{\vec B\circ\vec B}\cdot\vec B$$   ─   stal 30.06.2021 um 17:55

Mal gucken was ich mir so angelesen habe auf die Schnelle:
Sei G=s*a, mit s aus R, die Ursprungsgerade eben mit Richtungsvektor a.

Zuerst bauen wir eine hierzu senkrechte Ebene, deren Koordinatengleichung die Form
E: a1*x+a2*y+a3*z=d
wobei d=a*b ist.

Daher erfüllt die Ebene
E: a*Ebenenpunktsvektor=a*b

Sei P der Schnittpunkt von Gerade und Ebene, der auch gleichzeitig der Lotfußpunkt für später ist.
Es gilt einerseits dass P=s*a sein muss, für ein gewisses s, da er ja auf der Geraden liegt.

Andererseits muss der Punkt aber auch obige Ebenengleichung erfüllen, weshalb eingesetzt gelten muss:
a*(s*a)=a*b
wegen irgendnem gesetz (könnte ich direkt beweisen über die Komponente) kann man das s noch rausziehen:
s*(a*a)=a*b
a ist parallel zu a, daher ist a*a=|a|^2 nach der Formel des Skalarprodukts mit dem Winkel drin.

Umgestellt ist also
s=a*b/(|a|^2)

Mit der Geradenformel (G=s*a) folgt dann dass der Lotfußpunkt sich berechnen lässt über
P=s*a= a*b/(|a|^2) *a
halt jener komische Ausdruck ergibt ja eine Zahl und die multipliziert mit dem a Vektor gibt die koordinaten des Lotfußpunkts, bzw. dessen Ortsvektor.

Nun müsste sich final der gesuchte Spiegelpunkt bestimmen lassen über
OC=OB+2*BP
will sagen:
OC=b+2*(P-b)=b+2*( (a*b/(|a|^2)) *a ) -b)

Was meint ihr dazu, stimmt das Alles soweit? :-)
  ─   densch 30.06.2021 um 18:25

Kommentar schreiben