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

Aktuelle Zeit: Do Sep 04, 2025 00:10

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: (Vektor) 3D-Rotation Sonderfälle
BeitragVerfasst: Do Mai 13, 2010 20:24 
Offline
DGL Member

Registriert: Di Mai 27, 2008 17:07
Beiträge: 21
Hallo!

Um einen Vektor in Richtung eines Bestimmten Punktes zu drehen (z.b. der Vektor [0, 0, 1] soll so gedreht werden, dass er auf den Punkt (1, 1, 1) zeigt) errechne ich mir die passenden Drehwinkel mit Hilfe von Umstellung der Formeln:

x = r cos(alpha) cos(beta)
z = r sin(beta)

Wobei alpha die drehung um die z-Achse und beta die Drehung um die y-Achse beschreibt.
Jetzt entstehen hierbei verschiedene Sonderfälle die es abzufangen gilt, die ich aber nicht ganz erfassen kann. Manchmal muss ich alpha und beta vertauschen, ein anderes mal nur alpha invertieren. Irgendwie kapiere ich nicht, was ich da alles abfangen muss. Kann mir da jemand helfen? :)

Danke & Gruß


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 13, 2010 22:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Das mit den ganzen Sonderfällen liegt daran, dass das mit den drei Winkeln nicht eindeutig ist. Ich empfehle dir entweder Matrizen oder Quaternions zu benutzen. Beide Ansätze mögen auf den ersten Blick kompliziert wirken, sind es aber eigentlich gar nicht.

Eine Matrix enthält nämlich einfach nur die drei Vektoren auf die die drei Einheitsvektoren (also 100, 010 und 001) abgebildet werden. In deinem Fall wäre also z.B. die dritte Spalte der Matrix (a,a,a,0) mit a = sqrt(3), weil du (0,0,1) auf (1,1,1) abbilden willst. Der Vektor (a,a,a) ist der Vektor (1,1,1) skaliert auf die Länge 1.
Nehmen wir an du hast deine fertige Matrix M die die von dir gewünschte Rotation ausführt. Im Anschluss könntest du jetzt theoretisch noch eine Rotationsmatrix R die um einen beliebigen Winkel auf der Achse (1,1,1) dreht anwenden.
Sämtliche dieser Transformationen erfüllen die von dir geforderte Eigenschaft das (001) auf (111) abgebildet wird.
=> Deine Rotation ist nicht eindeutig definiert.
Aus diesem Grund kannst du die erste und zweite Spalte der Matrix mit beliebigen Vektoren füllen die orthogonal zu einander und orthogonal zum dritten Vektor stehen. Die vierte und letzte Spalte ist einfach der Punkt auf den (0,0,0) abgebildet wird, also (x,y,z,1). Du willst hier nur eine Rotation, daher x = y = z = 0.
Im Wiki sollte das irgendwo etwas detaillierter erklärt sein


Quaternions sind ebenfalls nicht so kompliziert....nur die meisten Erklärungen von Quaternions sind kompliziert. :P
Es handelt sich um eine Art komplexe Zahlen, nur das es neben der imaginären Einheit i noch zwei weitere unterschiedliche imaginäre Einheiten j und k gibt. Es handelt sich also quasi um vierdimensionale komplexe Zahlen. ABER: Letztlich benutzt man diese nur um einen Drehwinkel und eine Drehachse elegant zu speichern. Genaugenomen speichert man in der ersten Komponente den Cosinus des halben Winkels und in den restlichen Komponenten die Drehachse multipliziert mit dem Sinus. Mit den vier Komponenten (a,b,c,d) kann man beliebige Rotationen im 3D-Raum darstellen.

Code:
halfAngle = angle / 2.0;
a = cos(halfAngle);
b = sin(halfAngle) * axis.x;
c = sin(halfAngle) * axis.y;
d = sin(halfAngle) * axis.z;

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 14, 2010 08:15 
Offline
DGL Member

Registriert: Di Mai 27, 2008 17:07
Beiträge: 21
Hallo!

Vielen Dank für die umfangreiche Erklärung. Dann schaue ich mir das mal an mit den von dir genannten Vorschlägen, vielleicht klappt es ja dann :)

Vielen Dank,
Sispi


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 14, 2010 09:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Coolcat hat geschrieben:
Im Wiki sollte das irgendwo etwas detaillierter erklärt sein
JA. Und zwar hier: http://wiki.delphigl.com/index.php/Tutorial_Nachsitzen


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mai 19, 2010 22:47 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Yay Traude schreibt mal wieder :) (Vielleicht bin ich auch blind ^^)

(Sorry für OT ^^)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 20, 2010 12:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hin und wieder kann ich gar nicht anders. :wink:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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.007s | 14 Queries | GZIP : On ]