Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Mai 15, 2024 13:44

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Matrix auseinandernehmen
BeitragVerfasst: Sa Apr 10, 2010 12:11 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Serv,

ich würde gerne Wissen was ich berechnen muss damit ich aus einer 4x4 Matrix folgende Informationen bekomme:

- Position
- Skalierung
- Rotation (3 Euler Winkel X,Y,Z)

Leider bin ich nicht wirklich gut in sowas und habe schon probleme eine Formel in anderer Form zu definieren.

Danke schonmal,
Final


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrix auseinandernehmen
BeitragVerfasst: Sa Apr 10, 2010 12:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Da empfehle ich (wie so oft) das ultimative Matrix (und Quaternionen) FAQ. Dort steht alles wichtige drin, u.a. auch wie man Eulerwinkel aus einer Matrix bekommt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrix auseinandernehmen
BeitragVerfasst: Sa Apr 10, 2010 12:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ok, nehmen wir an du ließt eine OpenGL-Matrix in dieser Reihenfolge in den Speicher.
Code:
float _11, _12, _13, _14; // X-axis
float _21, _22, _23, _24; // Y-axis
float _31, _32, _33, _34; // Z-axis
float _41, _42, _43, _44; // Position


_14, _24, _34 sind üblicherweise 0. _44 ist üblicherweise 1. Eine Ausnahme sind z.B. Projektionsmatrizen.

Der Punkt (0,0,0) wird auf den Punkt (_41, _42, _43) abgebildet, das ist also schon mal deine Position.
Der Punkt (1,0,0) wird auf den Punkt (_11, _12, _13) + (_41, _42, _43) abgebildet.
Der Punkt (0,1,0) wird auf den Punkt (_21, _22, _23) + (_41, _42, _43) abgebildet.
Der Punkt (0,0,1) wird auf den Punkt (_31, _32, _33) + (_41, _42, _43) abgebildet.
Die Skalierung ergibt sich also aus der Länge von (_11, _12, _13), (_21, _22, _23) und (_31, _32, _33)

Von der Verwendung der Euler-Winkel würde ich abraten:
Wikipedia hat geschrieben:
Zur Darstellung von Drehungen haben Eulerwinkel mehrere Nachteile:
  • Die oben erwähnte Singularität führt dazu, dass eine einzige Drehung durch unterschiedliche Eulerdrehungen ausgedrückt werden kann. Dies führt zu einem Phänomen, das als Gimbal Lock bekannt ist.
  • Die korrekte Kombination von Drehungen im Euler-System ist nicht intuitiv anzugeben, da sich die Drehachsen verändern.
Andere Möglichkeiten, die Orientierung zu beschreiben und teils diese Nachteile zu umgehen, sind Rotationsmatrizen oder Quaternionen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Matrix auseinandernehmen
BeitragVerfasst: Sa Apr 10, 2010 14:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Finalspace,

Für die Position : Matrix mit Vektor (0, 0, 0, 1) multiplizieren, das Ergebnis ist die gesuchte Translation ( oder du schaust dir einfach die letzte Spalte der Matrix an ;) )

Für die Skalierung : Matrix mit Vektor ( 1, 1, 1, 1) multiplizieren und du müsstest theoretisch die Skalierungsfaktoren für x, y und z bekommen.

Rotation : Hmm...vielleicht mit Vektor ( 1, 0, 0, 0 ) ( für y, z-Rotation ) und (0, 1, 0, 0) (für x-Rotation) multiplizieren und dann Winkel zwischen diesen und den Ergebnisvektoren berechnen, weiß aber nicht ob dies wirklich funktioniert...


Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Mathematik-Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.029s | 17 Queries | GZIP : On ]