AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verständnisproblem bei Rotationsmatrizen
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisproblem bei Rotationsmatrizen

Ein Thema von 3_of_8 · begonnen am 6. Feb 2007 · letzter Beitrag vom 7. Feb 2007
Antwort Antwort
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

Verständnisproblem bei Rotationsmatrizen

  Alt 6. Feb 2007, 22:59
Morgen.

Ich habe gerade ein Problem bei Rotationsmatrizen.

Wie kann ich aus einer Rotationsmatrix die einzelnen Winkel berechnen?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
em-sigma

Registriert seit: 8. Jul 2004
40 Beiträge
 
Delphi 12 Athens
 
#2

Re: Verständnisproblem bei Rotationsmatrizen

  Alt 7. Feb 2007, 10:12
Hi,

schau doch mal hier

Roll-Pitch-Yaw-Winkel

oder hier

Euler-Winkel

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
Allen ist das Denken erlaubt. Vielen bleibt es erspart. (Curt Goetz)
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Verständnisproblem bei Rotationsmatrizen

  Alt 7. Feb 2007, 13:58
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:
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;
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.

EDIT: Es sei dazugesagt, dass Zeilen- und Spaltenindizes hier vertauscht wird. Die Matrizen liegen spaltenweise im Speicher.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz