Quaternion: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Isometrien auf V: Fehler)
K (Rechtschreibfehler)
Zeile 2: Zeile 2:
  
 
=== Übersicht ===
 
=== Übersicht ===
Quaternionen bilden ein 4D-Zahlensystem ähnlich dem 2D-Zahlensystem der Komplexen Zahlen, jedoch sind sie bei der Multiplikation nicht kommutativ ( d.h. für quaternionen q1, q2 gilt nicht immer: q1*q2 = q2*q1 ). Sie werden häufig zur Darstellung und einfachen Berechnung von Isometrien (Drehungen) im 3D-Raum verwendet, wobei sie hier deutlich anschaulicher sind, als Unitäre Matrizen (Rotationsmatrizen).
+
Quaternionen bilden ein 4D-Zahlensystem ähnlich dem 2D-Zahlensystem der Komplexen Zahlen, jedoch sind sie bei der Multiplikation nicht kommutativ ( d.h. für Quaternionen q1, q2 gilt nicht immer: q1*q2 = q2*q1 ). Sie werden häufig zur Darstellung und einfachen Berechnung von Isometrien (Drehungen) im 3D-Raum verwendet, wobei sie hier deutlich anschaulicher sind als unitäre Matrizen (Rotationsmatrizen).
  
 
=== Definition ===
 
=== Definition ===
Ein Quaternion q hat folgende, eindeutige gestalt:
+
Ein Quaternion q hat folgende, eindeutige Gestalt:
 
  q = a + b*i + c*j + d*k,
 
  q = a + b*i + c*j + d*k,
wobei a,b,c,d reele Zahlen darstellen und i,j,k Imaginäre Zahlen mit den Eigenschaften:
+
wobei a, b, c, d reele Zahlen darstellen und i, j, k Imaginäre Zahlen mit den Eigenschaften:
 
  i*i=j*j=k*k=-1
 
  i*i=j*j=k*k=-1
 
  i*j = k = -j*i
 
  i*j = k = -j*i
 
  j*k = i = -k*j
 
  j*k = i = -k*j
 
  k*i = j = -i*k
 
  k*i = j = -i*k
Die Quaternionen H bilden also einen 4-Dimensionalen Raum in den Komponenten a,b,c,d.
+
Die Quaternionen H bilden also einen 4-Dimensionalen Raum in den Komponenten a, b, c, d.
 
Man trennt dabei häufig den 3D-Raum der reinen Quaternionen V der Form v = b*i + c*j + d*k heraus.
 
Man trennt dabei häufig den 3D-Raum der reinen Quaternionen V der Form v = b*i + c*j + d*k heraus.
  
Zeile 18: Zeile 18:
  
 
==== Addition ====
 
==== Addition ====
Die Addition zweier Quaternionen geschieht Komponentenweise, also:
+
Die Addition zweier Quaternionen geschieht komponentenweise, also:
 
  q = a + bi+ cj + dk
 
  q = a + bi+ cj + dk
 
  r = e + fi+ gj + hk
 
  r = e + fi+ gj + hk
Zeile 24: Zeile 24:
  
 
==== Multiplikation ====
 
==== Multiplikation ====
Die Multiplikation zweier Quaternionen geschieht wie auf den reelen Zahlen gewohnt mit gedachten Variablen i,j,k, wobei die oben definierten Eigenschaften zum Einsatz kommen:
+
Die Multiplikation zweier Quaternionen geschieht wie auf den reelen Zahlen gewohnt mit gedachten Variablen i, j, k, wobei die oben definierten Eigenschaften zum Einsatz kommen:
 
  q*r = (a + bi+ cj + dk)*(e + fi+ gj + hk) =
 
  q*r = (a + bi+ cj + dk)*(e + fi+ gj + hk) =
 
     = ae + afi + agj + ahk   
 
     = ae + afi + agj + ahk   
Zeile 34: Zeile 34:
 
       + (a * g - b * h + c * e + d * f)j
 
       + (a * g - b * h + c * e + d * f)j
 
       + (a * h + b * g - c * f + d * e)k  
 
       + (a * h + b * g - c * f + d * e)k  
Man beachte im allgemeinen: '''q*r <> r*q''' !
+
Man beachte im Allgemeinen: '''q*r <> r*q''' !
  
 
==== Konjugation ====
 
==== Konjugation ====
 
Die Konjugation ist definiert durch:
 
Die Konjugation ist definiert durch:
 
  konj(q) = a - bi - cj - dk,
 
  konj(q) = a - bi - cj - dk,
also der Inversion des Vorzeichens der Imaginären Anteile i,j,k.
+
also die Inversion des Vorzeichens der Imaginären Anteile i, j, k.
Es lässt sich leicht zeigen, daß gilt:
+
Es lässt sich leicht zeigen, dass gilt:
 
  konj(konj(q)) = q
 
  konj(konj(q)) = q
 
  konj(q*p) = konj(p)* konj(q)
 
  konj(q*p) = konj(p)* konj(q)
Zeile 50: Zeile 50:
  
 
==== Inversion ====
 
==== Inversion ====
Mit den obigen Funktionen lässt sich sehr leicht ein Quaternion h zu q berechnen, so daß gilt: h*q=q*h=1, denn:
+
Mit den obigen Funktionen lässt sich sehr leicht ein Quaternion h zu q berechnen, so dass gilt: h*q=q*h=1, denn:
 
  ||q||^2 = q * konj(q)
 
  ||q||^2 = q * konj(q)
 
  <=>  
 
  <=>  
Zeile 60: Zeile 60:
 
Und damit:
 
Und damit:
 
  1 = h * q.
 
  1 = h * q.
h ist also das multiplikativ Inverse zu q: h = q^(-1)
+
h ist also das multiplikativ invers zu q: h = q^(-1)
  
 
=== Injektion der Reelen und Komplexen Zahlen ===
 
=== Injektion der Reelen und Komplexen Zahlen ===
Die Reellen Zahlen lassen sich injektiv in die Quaternionen abbilden:
+
Die reellen Zahlen lassen sich injektiv in die Quaternionen abbilden:
 
  x -> x + 0*i + 0*j + 0*k
 
  x -> x + 0*i + 0*j + 0*k
Entsprechend für die Komplexen Zahlen:
+
Entsprechend für die komplexen Zahlen:
 
  x + y*i -> x+ y*i + 0*j + 0*k
 
  x + y*i -> x+ y*i + 0*j + 0*k
 
Die zugehörigen Rechenregeln bleiben dabei erhalten.
 
Die zugehörigen Rechenregeln bleiben dabei erhalten.
Zeile 90: Zeile 90:
 
  Phi(Q,.): V -> V
 
  Phi(Q,.): V -> V
 
  x -> Phi(Q,x) := Phi(Q,Q,x) = Q*x*konj(Q) = Q*x*Q^-1,
 
  x -> Phi(Q,x) := Phi(Q,Q,x) = Q*x*konj(Q) = Q*x*Q^-1,
wobei offensichtlich Phi(-Q,.) = Phi(Q,.), also Q und -Q beschreiben die selbe Drehung.
+
wobei offensichtlich Phi(-Q,.) = Phi(Q,.), Q und -Q beschreiben also die selbe Drehung.
 
Und entsprechnd der Rechenregeln für Phi auf H (siehe oben) gilt mit einem Quaternion Q' mit ||Q'||=1:
 
Und entsprechnd der Rechenregeln für Phi auf H (siehe oben) gilt mit einem Quaternion Q' mit ||Q'||=1:
 
  Phi(Q, Phi(Q', x)) = Q*Q'*x*konj(Q')*konj(Q) = (Q*Q')*x*konj(Q*Q') = Phi(Q*Q',x)
 
  Phi(Q, Phi(Q', x)) = Q*Q'*x*konj(Q')*konj(Q) = (Q*Q')*x*konj(Q*Q') = Phi(Q*Q',x)
Zeile 96: Zeile 96:
 
Man kann Q sehr leicht zerlegen in:
 
Man kann Q sehr leicht zerlegen in:
 
  Q = cos(alpha) + sin(alpha)*P, 0<=alpha<=Pi, P aus V, ||P|| = 1,
 
  Q = cos(alpha) + sin(alpha)*P, 0<=alpha<=Pi, P aus V, ||P|| = 1,
wobei dann Phi(Q,x) eine Drehung von x (man beachte, daß dabei x aus V ist) um den Winkel 2*alpha um die Achse P darstellt.
+
wobei dann Phi(Q,x) eine Drehung von x (man beachte, dass dabei x aus V ist) um den Winkel 2*alpha um die Achse P darstellt.

Version vom 11. Oktober 2006, 18:58 Uhr

Hamiltonsche Quaternionen

Übersicht

Quaternionen bilden ein 4D-Zahlensystem ähnlich dem 2D-Zahlensystem der Komplexen Zahlen, jedoch sind sie bei der Multiplikation nicht kommutativ ( d.h. für Quaternionen q1, q2 gilt nicht immer: q1*q2 = q2*q1 ). Sie werden häufig zur Darstellung und einfachen Berechnung von Isometrien (Drehungen) im 3D-Raum verwendet, wobei sie hier deutlich anschaulicher sind als unitäre Matrizen (Rotationsmatrizen).

Definition

Ein Quaternion q hat folgende, eindeutige Gestalt:

q = a + b*i + c*j + d*k,

wobei a, b, c, d reele Zahlen darstellen und i, j, k Imaginäre Zahlen mit den Eigenschaften:

i*i=j*j=k*k=-1
i*j = k = -j*i
j*k = i = -k*j
k*i = j = -i*k

Die Quaternionen H bilden also einen 4-Dimensionalen Raum in den Komponenten a, b, c, d. Man trennt dabei häufig den 3D-Raum der reinen Quaternionen V der Form v = b*i + c*j + d*k heraus.

Grundlegende Arithmetik

Addition

Die Addition zweier Quaternionen geschieht komponentenweise, also:

q = a + bi+ cj + dk
r = e + fi+ gj + hk
q + r = (a + e) + (b + f)i + (c + g)j + (d + h)k

Multiplikation

Die Multiplikation zweier Quaternionen geschieht wie auf den reelen Zahlen gewohnt mit gedachten Variablen i, j, k, wobei die oben definierten Eigenschaften zum Einsatz kommen:

q*r = (a + bi+ cj + dk)*(e + fi+ gj + hk) =
    = ae + afi + agj + ahk  
      + bie + bifi + bigj + bihk
      + cje + cjfi + cjgj + cjhk
      + dke + dkfi + dkgj + dkhk
    = (a * e - b * f  - c * g - d * h)
      + (a * f + b * e + c * h - d * g)i
      + (a * g - b * h + c * e + d * f)j
      + (a * h + b * g - c * f + d * e)k 

Man beachte im Allgemeinen: q*r <> r*q !

Konjugation

Die Konjugation ist definiert durch:

konj(q) = a - bi - cj - dk,

also die Inversion des Vorzeichens der Imaginären Anteile i, j, k. Es lässt sich leicht zeigen, dass gilt:

konj(konj(q)) = q
konj(q*p) = konj(p)* konj(q)
konj(q + p) = konj(q) + konj(p)

Norm / Betrag

Die Norm ||q|| eines Quaternions Q ist definiert als:

 ||q|| = Sqrt(a*a + b*b + c*c + d*d) = Sqrt(q*konj(q))

Inversion

Mit den obigen Funktionen lässt sich sehr leicht ein Quaternion h zu q berechnen, so dass gilt: h*q=q*h=1, denn:

||q||^2 = q * konj(q)
<=> 
1 = (q * konj(q)) / ||q||^2
h := konj(q) / ||q||^2
=> 1 = q * h

Und weil offensichtlich ||q|| = ||konj(q)|| gilt, folgt

||q||^2 = ||konj(q)||^2 = konj(q)*konj(konj(q)) = konj(q)*q

Und damit:

1 = h * q.

h ist also das multiplikativ invers zu q: h = q^(-1)

Injektion der Reelen und Komplexen Zahlen

Die reellen Zahlen lassen sich injektiv in die Quaternionen abbilden:

x -> x + 0*i + 0*j + 0*k

Entsprechend für die komplexen Zahlen:

x + y*i -> x+ y*i + 0*j + 0*k

Die zugehörigen Rechenregeln bleiben dabei erhalten.

Isometrien auf Quaternionen

Isometrien auf H

Die Isometrien der Quaternionen auf sich selbst (also die Isometrien des 4D-Raumes) lassen sich in Quaternionen beschreiben durch zwei Quaternionen P,Q, mit ||P||=||Q|| = 1 und den Abbildungen

Phi(P,Q,.): H -> H,
x -> Phi(P,Q,x) := P*x*konj(Q) = P*x*(Q^(-1))
Psi(P,Q,.): H -> H
x -> Psi(P,Q,x) := P*konj(x)*konj(Q) = P*konj(x)*(Q^(-1))

Dabei gilt für Quaternionen P',Q' mit ||P'||=||Q'||=1:

Phi(P,Q,Phi(P',Q',.)) = Phi(P*P',Q*Q',.)
Phi(P,Q,Psi(P',Q',.)) = Psi(P*P',Q*Q',.)
Psi(P,Q,Psi(P',Q',.)) = Phi(P*Q',Q*P',.)
Psi(P,Q,Phi(P',Q',.)) = Psi(P*Q',Q*P',.),

was man ohne weiteres ausrechnen kann.

Isometrien auf V

Der Fall der Isometrien auf den reinen Quaternionen V (siehe Definition) ist der für die 3D Grafik interessante Fall. Sie stellen die Rotationen auf V dar und das in einer besonders leicht lesbaren Form. Sei also Q eine Quaternion der Norm 1, dann gehört dazu eine Isometrie auf V:

Phi(Q,.): V -> V
x -> Phi(Q,x) := Phi(Q,Q,x) = Q*x*konj(Q) = Q*x*Q^-1,

wobei offensichtlich Phi(-Q,.) = Phi(Q,.), Q und -Q beschreiben also die selbe Drehung. Und entsprechnd der Rechenregeln für Phi auf H (siehe oben) gilt mit einem Quaternion Q' mit ||Q'||=1:

Phi(Q, Phi(Q', x)) = Q*Q'*x*konj(Q')*konj(Q) = (Q*Q')*x*konj(Q*Q') = Phi(Q*Q',x)

Man kann Q sehr leicht zerlegen in:

Q = cos(alpha) + sin(alpha)*P, 0<=alpha<=Pi, P aus V, ||P|| = 1,

wobei dann Phi(Q,x) eine Drehung von x (man beachte, dass dabei x aus V ist) um den Winkel 2*alpha um die Achse P darstellt.