Krishty hat geschrieben:...wo man die Transformation eines Objekts hat und nun wissen will, wie viel Grad es gegenüber Norden rotiert ist, um das z.B. als Kompass auf dem HUD anzuzeigen.
Ich will nicht darauf herumhacken oder unbedingt das letzte Wort haben - ich erwähne das nur nochmal, weil es bei mir damals bei genau so einem Fall "Klick" gemacht hatte, wie elegant Vektoren und Matrizen gegenüber Winkelberechnungen doch sind...
Nehmen wir den Fall, dass du den Winkel für's HUD brauchst, und berechnest ihn mittels acos() aus dem Skalarprodukt. Was dann? Um den Endpunkt für die Zeigerlinie auf dem HUD-Kompass zu bekommen, rechnest du sowas wie ex=sin(winkel); ey=cos(winkel). Erst acos und dann cos? Nein, nimm doch einfach direkt die Koeffizienten aus der Matrix.
Und was, wenn du eine 2D-Sprite-Engine hast, die eine Zeigergrafik mittels Methode rotate(winkel) rotiert? Dann ist es eine schlechte 2D-Engine, wenn sie keine 2D-Matrizen erlaubt. Denn intern wird wieder was mit sin und cos gemauschelt, obwohl du die Werte schon fertig vorliegen hast. Und spätestens wenn die Sprites an die GPU geschickt werden, gibts ja doch wieder Matrizen - die könnte man eigentlich gleich bestücken. Ein paar mov's vs. Winkelberechnungen, da fällt doch die Entscheidung leicht...
Wie gesagt, der einzige denkbare Fall wäre die Anzeige des numerischen Werts. Nicht aber irgendwas, das mit Winkel
darstellung in einem kartesischen Koordinatensystem zu tun hat, da du sonst praktisch immer unnötige und doppelte Berechnungen machst.
Übrigens, so "interpoliere" ich z.B. eine Matrix zu einer Look-At-Lage (Anwendungsfall ist KI-Botsteuerung):
- der Look-At-Punkt wird mit der Inversen der Matrix multipliziert ("wo ist der Zielpunkt von der Matrix aus gesehen?")
- die Achsabschnitte des transformierten Punktes (x,y,z) geben mir direkt die Rotationsrichtung (z.B. x<0 --> nach links drehen) sowie ein Maß für den Rotationsabstand an (kein Winkel, aber genauso brauchbar, falls überhaupt benötigt)
- durch Addition/Subtraktion eines entsprechenden Beschleunigungswertes zur aktuellen Rotationsgeschwindigkeit (und dabei Prüfen/Einhalten der individuellen Bewegungsmöglichkeiten) lässt sich damit ein ziemlich natürliches Bewegungsverhalten mit einfachsten Berechnungen simulieren, vor allem dann wenn sich der Zielpunkt bewegt.
- eine fest definierte Endlage und -zeit und somit einen festen Weg gibt es bei mir nicht, nur Ziele und Einschränkungen. Der Weg dorthin entwickelt sich. Wie im richtigen Leben halt ;-)
Lineare Interpolation - damit stelle ich mir das in meinem Fall sogar unschöner bzw. komplizierter vor.