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?
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. 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;
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.