winkelberechnung bei vektoren von -pi bis plus pi < Lineare Algebra < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 14:14 Di 15.06.2004 | Autor: | giskard |
Hallo!
ich programmiere zur zeit meine "eigene kleine 3D-engine" , habe dabei aber ein kleines mathematisches Problem:
ich möchte den Winkel zwischen zwei Vektoren berechnen (achso, im 3D natürlich, alles andere übersteigt mein verständnis), vo 0 bis Pi ist das übers Skalarprodukt ja kein Problem, ich brauche aber den ganzen Kreis! (also ob 0 bis 2 Pi oder - Pi bis + Pi ist mir egal.)
ich hab mir da folgendes gedacht:
vektor a ist orthogonal zu b, vektor x liegt in der Ebene von a und b.
der winkel von vektor x zu a soll bestimmt werden.
also dann übers skalarprodukt, da geht aber schon die information verloren, auf welcher "seite" der vektor x liegt (also auf der seite , in der auch b liegt, oder auf der anderen).
ich hab mir gedacht, vielleicht kann man da etwas übers kreuzprodukt von a und x erreichen, in den einen fall zeigt der resultierende vektor nach oben, im anderen nach unten. aber wie unterscheide ich dann diesen beiden fälle?
vielleicht fällt euch noch ne möglichst kleine lösung ein, mit nicht so viel rechenaufwand.
Dankeschön!
giskard
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:39 Di 15.06.2004 | Autor: | Paulus |
Hallo giskard
ich befürchte, dass sich dein Problem gar nicht allgemein lösen lässt. Vielleicht, wenn du noch zusätzliche Einschränkungen, welcher Art auch immer geben würdest? Keine Ahnung!
Das Problem ist nämlich das Folgende:
Wenn du deine 2 Vektoren betrachtest, dann kannst prinzipiell nicht sagen, ob der Winkel [mm] $+\alpha$ [/mm] oder [mm] $-\alpha$ [/mm] ist. Du kannst ihn zwar betrachten und behaupten, er sei [mm] $+\alpha$. [/mm] Dein Kollege aber, der sich auf der andern Seite der Ebene, welche die beiden Vektoren aufspannen, befindet, wird mit dem genau gleichen Recht behaupten, der Winkel sei [mm] $-\alpha$. [/mm] Beide Beobachter sind aber gleichberechtigt, und die Entscheidung somit nicht zu machen!
Mit lieben Grüssen
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:04 Di 15.06.2004 | Autor: | giskard |
hallo paulus!
Danke erstmal für deine prompte bearbeitung!
ich grad auch nochmal drüber nachgedacht:
ich hab ja vom Vektor b gesprochen ,der orthogonal zu a ist. wenn man nun die seite, auf der b liegt, als positiv definiert, wäre die andere seite negativ, egal von welcher seite der ebene du die situation betrachtest.
das Skalar zweier vektoren, die einen winkel < als pi/2 einnehmen, ist ja immer größer null, oder?
wenn das so ist, könnte man ja vielleicht vektor b zur hilfe nehmen, nämlich, indem man schaut, ob der winkel x zu b größer als pi/2 ist, wenn das der fall ist, befindet sich ja x auf der "anderen Seite" der ebene.
mhhhhm, vielleicht könnte das gehen:
winkel = arccos( a*x) * signum( b*x )
dürfte aber nur funktionieren, wenn b wirklich orthogonal zu a steht. Was meint ihr dazu?
Wäre aber schön, wenns noch ne andere lsg. gäbe, da ich den vektor b nicht immer orthogonal zu a halten will.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:30 Di 15.06.2004 | Autor: | Paulus |
Hallo giskard
> hallo paulus!
> Danke erstmal für deine prompte bearbeitung!
>
Bittesehr!
> ich grad auch nochmal drüber nachgedacht:
>
> ich hab ja vom Vektor b gesprochen ,der orthogonal zu a
> ist. wenn man nun die seite, auf der b liegt, als positiv
> definiert, wäre die andere seite negativ, egal von welcher
> seite der ebene du die situation betrachtest.
>
Gut, dann würde ich folgendes vorschlagen:
Du betrachtest [mm] $\vec{a}$ [/mm] als Pendant zu dem sonst üblichen Einheitsvektor in x-Richtung, und [mm] $\vec{b}$ [/mm] entsprechend wie die y-Richtung. [mm] $\vec{a}\times\vec{b}$ [/mm] würde dann der z-Richtung entsprechen.
Weil du ja voraussetzt, dass der Vektor [mm] $\vec{x}$ [/mm] in der durch [mm] $\vec{a}$ [/mm] und [mm] $\vec{b}$ [/mm] aufgespannten Ebene liegt, kann [mm] $\vec{x}$ [/mm] doch als Linearkombination von [mm] $\vec{a}$ [/mm] und [mm] $\vec{b}$ [/mm] dargestellt werden.
Also etwa:
[mm] $\vec{x}=\lambda_{1}*\vec{a}+\lambda_{2}*\vec{b}$
[/mm]
Mit [mm] $\vec{x} [/mm] = [mm] \begin{pmatrix}x_{1}\\x_{2}\\x_{3}\end{pmatrix}$, $\vec{a} [/mm] = [mm] \begin{pmatrix}a_{1}\\a_{2}\\a_{3}\end{pmatrix}$ [/mm] und [mm] $\vec{b} [/mm] = [mm] \begin{pmatrix}b_{1}\\b_{2}\\b_{3}\end{pmatrix}$
[/mm]
entspricht das den 3 Gleichungen
[mm] $x_{1}=\lambda_{1}*a_{1}+\lambda_{2}*b_{1}$
[/mm]
[mm] $x_{2}=\lambda_{1}*a_{2}+\lambda_{2}*b_{2}$
[/mm]
[mm] $x_{3}=\lambda_{1}*a_{3}+\lambda_{2}*b_{3}$
[/mm]
Das kannst du zum Beispiel mit Hilfe der ersten 2 Gleichungen nach [mm] $\lambda_{1}$ [/mm] und [mm] $\lambda_{2}$ [/mm] auflösen:
[mm] $\lambda_{1}=\bruch{b_{2}x_{1}-b_{1}x_{2}}{a_{1}b_{2}-a_{2}b_{1}}$,
[/mm]
[mm] $\lambda_{2}=\bruch{a_{1}x_{2}-a_{2}x_{1}}{a_{1}b_{2}-a_{2}b_{1}}$
[/mm]
Wenn der Nenner nicht $0$ wird, sind dadurch [mm] $\lambda_{1}$ [/mm] und [mm] $\lambda_{2}$ [/mm] bestimmt, ansonsten musst du mit Hilfe der Gleicheungen 1 und 3 die [mm] $\lambda_{1}$ [/mm] und [mm] $\lambda_{2}$ [/mm] bestimmen, oder sogar mit Hilfe der Gleichungen 2 und 3.
(eines der drei Möglichkeiten muss zum Ziel führen, wenn [mm] $\vec{x}$ [/mm] wirklich in der Ebene liegt und [mm] $\vec{a}$ [/mm] und [mm] $\vec{b}$ [/mm] linear unabhängig sind!)
Wenn jetzt [mm] $\lambda_{2}$ [/mm] positiv ist, dann liegt der Winkel zwischen $0$ und [mm] $\pi$, [/mm] sonst zwischen $0$ und [mm] $-\pi$.
[/mm]
Falls [mm] $\vec{a}$ [/mm] und [mm] $\vec{b}$ [/mm] sogar orthonormal sind (senkrecht aufeinander und von der Länge $1$), dann ist [mm] $\lambda_{1}$ [/mm] der Kosinus, und [mm] $\lambda_{2}$ [/mm] der Sinus des gesuchten Winkels.
>
> Wäre aber schön, wenns noch ne andere lsg. gäbe, da ich den
> vektor b nicht immer orthogonal zu a halten will.
>
Das wäre hiermit wohl gegeben.
Mit lieben Grüssen
P.S. Du solltest deine Kommentare, wenn sie eine weitere Frage enthalten, jeweils als neue Frage markieren, damit wir eher darauf aufmerksam werden!
|
|
|
|