wenn man Informationen über diese mathematischen Teile haben will, bekommt man die pure Theorie nur so um die Ohren gehauen. Da ist die Rede von Zahlgebilden mit drei komplexen und einem reellen Teil usw. Und man schreibt gerne über eine Gedenktafel, die man irgenwo auf irgendeiner Brücke festgenagelt hat, weil irgendein Genie mal philosopierend darüber gegangen ist.
Auf der anderen Seite findet man die Dinger in fast jeder halbwegs vollständigen Funktionssammlung, neben Vektoren und Matrizen. Da entdeckt man nichts von imaginären Bestandteilen, man sieht nur, dass Quaternionen den Vektoren verdächtig ähnlich sehen, nur dass sie 4 Komponenten haben. Werden sie hier nur gebraucht, um an die 4x4-Matrizen von OpenGL heranzukommen?
Es wäre schön, wenn jemand mal kurz und ohne höhere Mathematik erklären kann, was Quaternionen sind und wozu man sie in der 3D-Programmiererei braucht.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Quaternionen sind Zahlen ähnlich den komplexen Zahlen.
Komplexe Zahlen haben einen imaginären Bestandteil: 1+1i ist zB. eine komplexe Zahl; i ist der sogenannte imaginäre Bestandteil. Per Definition ist festgelegt: (0+1i)² = i² = -1, dadurch kann man nämlich negative Wurzeln ziehen: Sqrt(-1) = i = (0+1i).
Verwendet man jetzt 3 imaginäre Bestandteile: i, j und k; also insgesamt 4 Bestandteile, zB. 4+1i+2j+5k so hat man ein Quaternion. Für die imaginären Bestandteile gilt komplizierter als für komplexe Zahlen: i² = j² = k² = i*j*k = -1. Durch diese Komplexität verlieren einige Rechenregeln der reellen Zahlen ihre Gültigkeit für Quaternionen.
Da man mit ihnen wie mit 4er Vektoren 4x4er Matrizen aufbauen kann, eignen sie sich gleichermaßen für Transformationen und Rotationen. Dabei sollen Quaternionen besonders für viele Drehungen im 3D-Raum geeignet sein, da sie sogar schneller als die Matrizen sein sollen.
Hm, scheint wohl unumgänglich zu sein, mich mal mit komplexen Zahlen zu befassen. Habe bisher immer einen Bogen drum gemacht, weil Wurzel aus -1 mir suspekt vorkam. Zwei (vielleicht naive) Fragen haben ich vorerst noch:
1. Müssen die komplexen Bestandteile in einem besonderen Format gespeichert werden, und wenn ja, in welchem? Oder reicht ein schlichtes GLfloat oder so etwas, und man erkennt die Komplexen an der Stellung im Array?
2. Die Leistungsfähgkeit von Quaternions wird immer wieder hervorgehoben. Heißt das aber auch, dass es Sachen gibt, die man nur mit Quaternions erledigen kann? Oder bedeuten sie nur eine Verbesserung, Vereinfachung, Geschwindigkeitssteigerung usw.?
Zu 1.: Es wäre schon geschickt es in einem Format zu speichern, daß mit deinen sonstigen Daten gut zusammenpasst - ganzzahlquaternionen machen i.A. selten sinn (ausschliessen sollte man es auch nicht, allein, daß man mit Ganzzahlen erstaunlich gut verlustfrei und sogar mit brüchen rechnetn kann <= Algebra), also bist Du mit GlFloat sicher nicht schlecht bedient. Ja, die Komplexen kannst Du einfach per index in einem Array indizieren. Würde ich jedenfalls so machen - siehe auch den oben verlinkten Wikieintrag.
Zu 2.: Selten daß man Dinge nur auf einen Weg erledigen kann. Quaternionen sind aber oft eine sehr elegante Möglichkeit und eine Quaternion mit 4 Dimensionen ist einfacher zu merken als eine 3x3 Matrix mit selber Funktion, die sowieso die meiste Information nur Spaßhalber mit sich herumführt. Jedenfalls, beim überlegen von einigen Geometrischen Zusammenhängen bei Rotationen sind Quaternionen oft nicht schlecht und man kann einige Informationen deutlich leichter aus ihnen herausziehen als aus Rotationsmatrizen, ist aber nicht so, daß vieles nicht auch anders ginge, aber oft sind Quaternionen halt nicht ganz sinnlos.
Warum ist die Wurzel aus -1 suspekt? Nur weils der Taschenrechner nicht kann? Wenn man nur Brüche zur Verfügung hat, kann man auch die Wurzel aus 2 nicht ziehen - in den Reelen Zahlen geht es aber... Die Komplexen Zahlen sind da nicht anders gestrickt und einfach eine Erweiterung der reelen Zahlen um ein paar interessante Möglichkeiten. Ehrlich gesagt: Ich finde Komplexe Zahlen sind, wenn man sich einmal dran gewöhnt hat, deutlich einfacher zu handeln als die reelen und viele Eigenschaften sind schöner... Nur das Zusammenziehen von Wurzeln sollte man sein lassen:
ich muss aber sagen, dass ich es schon nachvollziehen kann, warum man die komplexen Zahlen auf den ersten Blick nicht mag. Die Einführung der reellen Zahlen finde ich einfach greifbarer. Es ist der Anschauung nach klar, warum der Wert SQRT(2) existieren muss (Diagonalenlänge eines Quadrats mit der Kantenlänge 1). Dabei ist der Anschauung nach nicht unbedingt klar, warum SQRT(-1) existieren muss. In der Schule wurde mir der Wurzeloperator als die Funktion erklärt, die den Zahlenwert ermittelt, dessen Quadrat die Funktionsvariable ergibt. In der Realität ist aber ein negatives Quadrat schwer vorstellbar :)
Deshalb kann ich schon nachvollziehen, dass vielen Leuten, die nicht gerade HöMath studieren, die Einführung von imaginären Einheiten schwer fällt, sofern sie mathematisch noch nicht dorthin geführt wurden.
Na gut, das ist wohl eher ein fadenscheiniger Grund. Die Sperre habe ich vermutlich einem Physiklehrer zu verdanken, der die komplexen Zahlen nur so an die Tafel knallte, um einem die Scheinwiderstände und Phasenschiebungen im Wechselstromkreis nahezubringen. Es gibt da so Urerlebnisse ...
Aber gut, die 3D-Programmiererei weckt neue Motivationen. Wenn ich dich richtig verstanden habe, kann ein einzelnes Quaternion eine komplette Matrix ersetzen, zumindest für bestimmte Aufgaben. Dann müsste es ja möglich sein, die Informationen, die in einer Matrix stecken, in ein Quaternion zu packen und umgekehrt.
Da wird zwar nichts hergeleitet, aber dafür die wichtigsten Fragen beantwortet, wenn man damit programmieren möchte.
Zitat:
Q47. What are quaternions? Q48. How do quaternions relate to 3D animation?
Q49. How do I calculate the conjugate of a quaternion? Q50. How do I calculate the inverse of a quaternion? Q51. How do I calculate the magnitude of a quaternion? Q52. How do I normalise a quaternion? Q53. How do I multiply two quaternions together? Q54. How do I convert a quaternion to a rotation matrix? Q55. How do I convert a rotation matrix to a quaternion? Q56. How do I convert a rotation axis and angle to a quaternion? Q57. How do I convert a quaternion to a rotation axis and angle?
Q58. How do I convert spherical rotation angles to a quaternion? Q59. How do I convert a quaternion to spherical rotation angles? Q60. How do I convert Euler rotation angles to a quaternion? Q61. How do I use quaternions to perform linear interpolation between matrices? Q62. How do I use quaternions to perform cubic interpolation between matrices? Q63. How do I use quaternions to rotate a vector?
In der Tat, da steht eine Menge an praktischen Hinweisen. Besonders interessant fand ich aber die Erklärung "What are quaternions?". Ein Ausschnitt:
Zitat:
Quaternions extend the concept of rotation in three dimensions to rotation in four dimensions. This avoids the problem of "gimbal-lock" ...
"Gimbal-lock" habe ich mal kurz in Widipedia nachgeschlagen. Ohne auf die Beschreibung einzugehen, hier nur der bezeichnende Lösungsvorschlag:
Zitat:
Ähnlich tritt der Gimbal Lock auch bei Computermodellen auf, beispielsweise bei dreidimensionalen Simulationen, also auch bei einigen Computerspielen. Eine Lösung des Problems stellt hier die Verwendung von Quaternionen dar.
Schließlich noch einmal zurück zu der FAQ:
Zitat:
... A Quaternion is defined using four floating point values |x y z w|. These are calculated from the combination of the three coordinates of the rotation axis and the rotation angle...
Damit ist für mich natürlich noch nicht alles klar, aber die Richtung wird erkennbar - und der Sinn des Ganzen. Eine gewisse Parallelität scheint es zu glRotate zu geben. Da werden ja ebenfalls ein Rotationswinkel und drei Koordiaten zur Bestimmung der Drehachse verlangt. Mal schauen, könnte ganz spannend werden ...
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.