Winkel zwischen zwei Geraden
-
SeppJ schrieb:
[...] aber praktisch ist es oftmals unnötig und aufwendig.
Genau, meiner Erfahrung nach ist es sogar nicht nur oftmals, sondern praktisch immer eine äußerst schlechte Lösung, wenn man nicht gerade tatsächlich explizit nur den Winkel braucht, z.B. weil man ihm dem Benutzer anzeigen will. Ich würde sogar soweit gehen, folgende Faustregel vorzuschlagen: Wann immer du beim Arbeiten mit Vektoren glaubst, einen Winkel ausrechnen zu müssen, liegst du falsch...
-
dot schrieb:
SeppJ schrieb:
[...] aber praktisch ist es oftmals unnötig und aufwendig.
Genau, meiner Erfahrung nach ist es sogar nicht nur oftmals, sondern praktisch immer eine äußerst schlechte Lösung, wenn man nicht gerade tatsächlich explizit nur den Winkel braucht, z.B. weil man ihm dem Benutzer anzeigen will. Ich würde sogar soweit gehen, folgende Faustregel vorzuschlagen: Wenn du beim Arbeiten mit Vektoren glaubst, einen Winkel zu brauchen, dann liegst du falsch...
Ich wünschte, es wäre so. Ich habe ein Programm, in dem ich sehr oft den Wert cos(Winkel + Konstante) berechnen muss. Da fiel mir nichts besseres ein, als tatsächlich zuerst den arccos von cos(Winkel) zu nehmen, zu addieren und dann wieder den cos zu nehmen. Das ärgert mich noch heute
. Dir fällt dazu nicht zufällig was besseres ein?
(Entschuldigung für die Threadkaperung, aber das Thema ist mit der ersten Antwort hoffentlich schon gelöst)
-
SeppJ schrieb:
dot schrieb:
SeppJ schrieb:
[...] aber praktisch ist es oftmals unnötig und aufwendig.
Genau, meiner Erfahrung nach ist es sogar nicht nur oftmals, sondern praktisch immer eine äußerst schlechte Lösung, wenn man nicht gerade tatsächlich explizit nur den Winkel braucht, z.B. weil man ihm dem Benutzer anzeigen will. Ich würde sogar soweit gehen, folgende Faustregel vorzuschlagen: Wenn du beim Arbeiten mit Vektoren glaubst, einen Winkel zu brauchen, dann liegst du falsch...
Ich wünschte, es wäre so. Ich habe ein Programm, in dem ich sehr oft den Wert cos(Winkel + Konstante) berechnen muss. Da fiel mir nichts besseres ein, als tatsächlich zuerst den arccos von cos(Winkel) zu nehmen, zu addieren und dann wieder den cos zu nehmen. Das ärgert mich noch heute
. Dir fällt dazu nicht zufällig was besseres ein?
Naja, manchmal führt wohl leider kein Weg daran vorbei. Aber kannst du mir vielleicht ein bisschen genauer erklären, was du da machen musstest, vielleicht fällt mir ja was ein. Mann könnte sich einer Identität wie dem Additionstheorem bedienen. Dann brauchst du nur noch und berechnen, denn bekommst du übers Skalarprodukt und übers Kreuzprodukt. Die Frage ist aber, ob das am Ende noch was bringt...
-
dot schrieb:
SeppJ schrieb:
dot schrieb:
SeppJ schrieb:
[...] aber praktisch ist es oftmals unnötig und aufwendig.
Genau, meiner Erfahrung nach ist es sogar nicht nur oftmals, sondern praktisch immer eine äußerst schlechte Lösung, wenn man nicht gerade tatsächlich explizit nur den Winkel braucht, z.B. weil man ihm dem Benutzer anzeigen will. Ich würde sogar soweit gehen, folgende Faustregel vorzuschlagen: Wenn du beim Arbeiten mit Vektoren glaubst, einen Winkel zu brauchen, dann liegst du falsch...
Ich wünschte, es wäre so. Ich habe ein Programm, in dem ich sehr oft den Wert cos(Winkel + Konstante) berechnen muss. Da fiel mir nichts besseres ein, als tatsächlich zuerst den arccos von cos(Winkel) zu nehmen, zu addieren und dann wieder den cos zu nehmen. Das ärgert mich noch heute
. Dir fällt dazu nicht zufällig was besseres ein?
Naja, manchmal führt wohl leider kein Weg daran vorbei. Aber kannst du mir vielleicht ein bisschen genauer erklären, was du da machen musstest, vielleicht fällt mir ja was ein...
Es geht um den Winkel zwischen zwei Vektoren. Wenn dieser von 180° abweicht, dann soll diese Abweichung quadratisch bestraft werden. Bei 180° war es daher besonders einfach, den Cosinus des eigentlichen Winkels zum Quadrat als Abweichungsgewicht zu nehmen. Nun soll das gleiche aber auch für andere Winkel als 180° gemacht werden. Um Vergleichbarkeit zum 180° Fall zu gewährleisten, muss aber bei gleicher Abweichung zum Zielwinkel das gleiche Gewicht rauskommen. Daher brauche ich den Wert cos(Winkel - Zielwinkel)².
-
Ok, wenn ich das richtig verstanden hab, bräuchtest du doch eigentlich nur dein Koordinatensystem so rotieren, dass der Zielwinkel 180° entspricht?
-
dot schrieb:
Ok, wenn ich das richtig verstanden hab, bräuchtest du doch eigentlich nur dein Koordinatensystem so rotieren, dass der Zielwinkel 180° entspricht?
Winkel ändern sich nicht unter Drehung und das ist auch gut so. Außerdem ist eine Rotation viel aufwendiger als eine Winkelberechnung.
-
SeppJ schrieb:
dot schrieb:
Ok, wenn ich das richtig verstanden hab, bräuchtest du doch eigentlich nur dein Koordinatensystem so rotieren, dass der Zielwinkel 180° entspricht?
Winkel ändern sich nicht unter Drehung und das ist auch gut so. Außerdem ist eine Rotation viel aufwendiger als eine Winkelberechnung.
Sry, ich meinte natürlich, nur einen der beiden Vektoren zu drehen
Eine 2D Rotation entspricht nur 2 Skalarprodukten, also nicht so aufwändig, aber ja, vermutlich gibt es in dem Fall weder numerisch noch was die Performance angeht wirklich was zu gewinnen...
-
Es ist 3D :p . Eine allgemeine 3D-Rotation, um einen beliebigen Vektor an eine bestimmte Stelle zu drehen, ist leider ungeheuer schwer
.
-
Gar nicht so, weil das Problem ja eigentlich doch nur 2D ist. Du hast ja zwei Vektoren, könntest dir also über zwei Kreuzprodukte ein Basissystem bauen, in dem einer der Vektoren einer Koordinatenachse entspricht und den rotierten Vektor dann als Linearkombination dieser darstellen...Aber ja, in 3D gibts da wohl erst recht nix zu holen
-
SeppJ schrieb:
dot schrieb:
SeppJ schrieb:
[...] aber praktisch ist es oftmals unnötig und aufwendig.
Genau, meiner Erfahrung nach ist es sogar nicht nur oftmals, sondern praktisch immer eine äußerst schlechte Lösung, wenn man nicht gerade tatsächlich explizit nur den Winkel braucht, z.B. weil man ihm dem Benutzer anzeigen will. Ich würde sogar soweit gehen, folgende Faustregel vorzuschlagen: Wenn du beim Arbeiten mit Vektoren glaubst, einen Winkel zu brauchen, dann liegst du falsch...
Ich wünschte, es wäre so. Ich habe ein Programm, in dem ich sehr oft den Wert cos(Winkel + Konstante) berechnen muss. Da fiel mir nichts besseres ein, als tatsächlich zuerst den arccos von cos(Winkel) zu nehmen, zu addieren und dann wieder den cos zu nehmen. Das ärgert mich noch heute
. Dir fällt dazu nicht zufällig was besseres ein?
(Entschuldigung für die Threadkaperung, aber das Thema ist mit der ersten Antwort hoffentlich schon gelöst)
vielleicht missverstehe ich dich, aber wieso hast du nicht cos(x+y) = cos(x)*cos(y)-sin(x)*sin(y) genommen?
-
Namenloser324 schrieb:
vielleicht missverstehe ich dich, aber wieso hast du nicht cos(x+y) = cos(x)*cos(y)-sin(x)*sin(y) genommen?
Weil es unterm Strich nix bringen würde...
-
Eine allgemeine 3D-Rotation, um einen beliebigen Vektor an eine bestimmte Stelle zu drehen, ist leider ungeheuer schwer
Quaternionen?
-
knivil schrieb:
Eine allgemeine 3D-Rotation, um einen beliebigen Vektor an eine bestimmte Stelle zu drehen, ist leider ungeheuer schwer
Quaternionen?
Er bezieht sich wohl nicht auf die Frage, wie genau man einen Vektor rotieren kann, sondern darauf, dass das Problem unterbestimmt ist, wenn man nur einen fixen Punkt hat, da es unendliche viele mögliche Rotationsachsen gibt
-
knivil schrieb:
Eine allgemeine 3D-Rotation, um einen beliebigen Vektor an eine bestimmte Stelle zu drehen, ist leider ungeheuer schwer
Quaternionen?
Ich lasse mich ja gerne belehren, aber ich denke nicht, dass die mir hier großartig helfen. Die Problemstellung ist, das Koordinatensystem um einen bestimmten Winkel zu drehen und zwar um eine Achse die senkrecht auf zwei gegebenen Vektoren steht. Das ist (zumindest in Vektoralgebra) ein ungeheuer komplexer Ausdruck und mit meinem (zugegeben geringen) Wissen über Quaternionen komme ich auf nichts einfaches.
-
SeppJ schrieb:
Das ist (zumindest in Vektoralgebra) ein ungeheuer komplexer Ausdruck und mit meinem (zugegeben geringen) Wissen über Quaternionen komme ich auf nichts einfaches.
Mit Quaternionen ist das in der Tat trivial, da du aus dem Kreuzprodukt der beiden Vektoren direkt eine entsprechende Quaternion bauen kannst. Normalisierte Rotationsachse mal gibt dir den imaginären Anteil, den reellen Anteil deiner Quaternion.
Wie gesagt, denk ich aber nicht, dass du dadurch wirklich was gewinnen würdest, da du da in 3D einfach einen Haufen Arithmetik brauchst (in der anschließenden Transformation über die Quaternion steckt im Prinzip ein weiteres Kreuz-, ein Skalarprodukt und noch ein paar Multiplikationen und Additionen drin)...