![]() |
Verständnisproblem bei Rotationsmatrizen
Morgen.
Ich habe gerade ein Problem bei Rotationsmatrizen. Wie kann ich aus einer Rotationsmatrix die einzelnen Winkel berechnen? |
Re: Verständnisproblem bei Rotationsmatrizen
Hi,
schau doch mal hier ![]() oder hier ![]() In beiden Fällen gibt's in der Rotationsmatrix einen Term, der nur eine einzelne Winkelfunktion enthält, die sich leicht auflösen läßt. Daraus ergeben sich dann einfach die beiden anderen Winkel aus zwei anderen Matrix-Komponenten. Ich hoffe das hilft, em-sigma |
Re: Verständnisproblem bei Rotationsmatrizen
Die Artikel kenne ich.
Ich habe gestern noch einen Algorithmus dafür geschrieben, aber irgendwie scheint da was nicht ganz zu klappen... *kratz*
Delphi-Quellcode:
Wenn ich mich nur nach rechts oder links drehe (Yaw verändere) geht das prima. Sobald jedoch Pitch oder Roll dazukommen, bekomme ich völlig unsinnige Werte. Wenn ich beispielsweise aus Nulllage mehrmals hintereinander Camera.Turn(1, 0, 0); aufrufe, müsste sich eigentlich nur FPitch verändern, es verändern sich jedoch alle Winkel, vor allem der Roll Winkel.
procedure TMCCamera.Turn(const Pitch, Yaw, Roll: Single);
var Matrix: TMCMatrix4f; a, b, c: Single; begin glPushMatrix; glLoadIdentity; //Laden der Kameraposition glRotatef(FPitch, 1, 0, 0); glRotatef(FYaw, 0, 1, 0); glRotatef(FRoll, 0, 0, 1); //Drehen der Kamera um die Winkel Pitch, Yaw, Roll glRotatef(Pitch, 1, 0, 0); glRotatef(Yaw, 0, 1, 0); glRotatef(Roll, 0, 0, 1); //Laden der Modelviewmatrix in die Variable Matrix und zurücksetzen der Modelviewmatrix glGetFloatv(GL_MODELVIEW_MATRIX, @Matrix[0, 0]); glPopMatrix; //Berechnung der Winkel Beta, Alpha und Gamma (Bogenmaß) b:=ArcSin(min(1, -Matrix[0, 2])); a:=ArcSin(min(1, Matrix[1, 2]/Cos(b))); c:=ArcSin(min(1, Matrix[0, 1]/Cos(b))); //Umrechnung Bogenmaß in Grad FPitch:=c*180/Pi; FYaw:=b*180/Pi; FRoll:=a*180/Pi; end; EDIT: Es sei dazugesagt, dass Zeilen- und Spaltenindizes hier vertauscht wird. Die Matrizen liegen spaltenweise im Speicher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz