Grafikprogrammierer verwenden
Quaternionen , um dreidimensionale Kurven aufzuzeichnen.
Quaternionen sind jedoch schwer zu verstehen, da sie oberflächlich untersucht werden . Wir nehmen nur seltsame Multiplikationstabellen und andere kryptische Definitionen zum Glauben und verwenden sie als „Black Boxes“, die Vektoren nach Bedarf drehen. Warum
mathbfi2= mathbfj2= mathbfk2=−1 und
mathbfi mathbfj= mathbfk ? Warum nehmen wir einen Vektor und verwandeln ihn in einen "imaginären" Vektor, um ihn beispielsweise zu transformieren?
mathbfq(x mathbfi+y mathbfj+z mathbfk) mathbfq∗ ? Aber wen interessiert es, wenn alles funktioniert?
Es gibt eine Möglichkeit, Rotationen zu beschreiben, die als
Rotor bezeichnet werden und sich auf das Feld komplexer Zahlen (in 2D) und Quaternionen (in 3D) beziehen und sogar auf eine beliebige Anzahl von Dimensionen verallgemeinern.
Wir können Rotoren
fast vollständig von Grund auf neu erstellen, anstatt Quaternionen aus dem Nichts zu definieren und zu erklären, wie sie
rückwirkend funktionieren. Es dauert länger, aber es scheint mir wert zu sein, weil sie viel einfacher zu verstehen sind!
Darüber hinaus ist es für die Visualisierung und das Verständnis dreidimensionaler Rotoren nicht erforderlich, die vierte räumliche Dimension zu verwenden.
Es wäre großartig, wenn sie anfangen würden, die Verwendung und das Studium von Quaternionen zu ersetzen und sie durch Rotoren zu ersetzen. Das Ersetzen ist sehr einfach, aber der
Code bleibt fast gleich . Alles, was mit Quaternionen gemacht werden kann, zum Beispiel das Interpolieren und Entfernen von Achsschlössern (Gimbal Lock), kann mit Rotoren gemacht werden.
Aber wir beginnen viel mehr zu verstehen.(Im Originalartikel sind alle Grafiken interaktiv und auf den Artikel folgt ein Video. Durch Klicken auf die Wiedergabetasten können Sie den entsprechenden Abschnitt des Videos starten. Sie können auch auf die Übergangstaste unter dem Video klicken, um zum entsprechenden Abschnitt des Artikels zu gelangen. Sie können das Fenster erweitern, damit mehr Platz für das Video vorhanden ist oder stellen Sie eine konstante Größe ein.)
1. Flugzeuge drehen
1.1. Drehungen werden in zweidimensionalen Ebenen durchgeführt.
Im dreidimensionalen Raum nehmen wir normalerweise Windungen wahr, die um die Achsen auftreten, wie ein Rad, das sich um eine Achse dreht. Stattdessen wäre es korrekter, die Ebene darzustellen, auf der das Rad liegt. Diese Ebene ist senkrecht zur Achse.
Diese alte Frau dreht ein Rad im Flugzeug mathbfxz senkrecht zur Achse mathbfy .Dies geschieht, weil wir den Vektor in zwei Teile geteilt haben, von denen einer in der Ebene liegt (
mathbfv parallel ) und der andere ist draußen (
mathbfv perp ), dann dreht die Drehung den inneren Teil und der äußere bleibt unverändert.
Drehung in der Ebene yx [ Im Originalartikel können diese Animation und die Kamera bewegt werden ]Im zweidimensionalen Raum gibt es nur eine Ebene, in der eine Drehung möglich ist (
es gibt keinen äußeren Teil ). Die Annahme, dass Rotationen um die dritte Achse (senkrecht zur 2D-Ebene) auftreten, ist daher streng genommen falsch, da wir zur Vervollständigung der Rotationen keine weitere Dimension hinzufügen sollten.
Wenn wir dem zweidimensionalen „flachen Landbesitzer“ (der in der 2D-Ebene lebt und nie aus dem zweidimensionalen Raum herauskommt) von der senkrechten Rotationsachse erzählen, würde er fragen: „In welche Richtung zeigt diese Achse? Ich kann sie mir nicht vorstellen! "
HinweisUnd in höheren Dimensionen (4D und höher) ist es unmöglich, einen Normalenvektor zur 2D-Ebene zu bestimmen (zum Beispiel hat die 2D-Ebene in 4D zwei Normalenrichtungen, in 5D gibt es drei Normalenrichtungen und in nD ihre n−2 )
1.2. Die genaue Drehrichtung
Wenn wir über eine Drehung um eine Achse nachdenken, ist die Drehrichtung nicht definiert und muss daher durch eine Regel (die sogenannte „rechte Regel“) bestimmt werden.
Wenn wir jedoch annehmen, dass die Windungen innerhalb der Ebenen auftreten, wird die Richtung klar: Drehung in der Ebene
mathbfxy bedeutet eine Drehung, die einen (Einheits-) Vektor bewegt
mathbfx zum (Einheits-) Vektor
mathbfy innerhalb der Ebene bilden sie zusammen. Drehung in der Ebene
mathbfyx Ist eine Drehung in die entgegengesetzte Richtung: Es bewegt den Vektor
mathbfy zum Vektor
mathbfx .
HinweisIch erinnere mich, dass ich, als ich zum ersten Mal drei Matrizen von 3D-Rotationen entlang orthogonaler Ebenen erfuhr, zuerst dachte: Was zum Teufel ist eine Matrix? mathbfRy hat das entgegengesetzte Vorzeichen? Dies liegt an der Regel der rechten Hand, nach der wir die Drehung um die Achse bestimmen müssen mathbfy damit läuft es ab mathbfz zu mathbfx nicht von mathbfx zu mathbfz eine konstante "rechtshändige" Drehrichtung beizubehalten. Wenn wir direkt über das Flugzeug selbst sprechen, wird diese Regel unnötig.
R_X (\ theta) = \ begin {bmatrix} 1 & 0 & 0 \\ 0 & cos (\ theta) & -sin (\ theta) \\ 0 & sin (\ theta) & cos (\ theta) \ end {bmatrix} \: \: \: R_Y (\ theta) = \ begin {bmatrix} cos (\ theta) & 0 & \ bbox [5px, Rand unten: 2px durchgehend rot] {\ \} sin (\ theta) \\ 0 & 1 & 0 \\ \ bbox [5px, Rand unten: 2px durchgehend rot] {-} sin (\ theta) & 0 & cos (\ theta) \ end {bmatrix} \: \: \: R_Z (\ theta) = \ begin {bmatrix} cos (\ theta) & -sin (\ theta) & 0 \\ sin (\ theta) & cos (\ theta) & 0 \\ 0 & 0 & 1 \ end {bmatrix }
2. Bivektoren
2.1. Externe Arbeit
Berechnung der Rotationsachse beim Drehen eines Vektors
mathbfa zu einem anderen Vektor
mathbfb Wir nehmen das Vektorprodukt zweier Vektoren, um einen Vektor senkrecht zu beiden zu erhalten. Aber warum müssen wir die Ebene „verlassen“, wenn die Drehung im Wesentlichen eine zweidimensionale Operation ist?
Stattdessen nehmen wir ein sogenanntes
externes Produkt (auch als zweidimensionales Vektorprodukt bekannt), zwei Vektoren, und erzeugen ein neues Element, das als „Bivektor“ (oder 2-Vektor) bezeichnet wird.
mathbfB Darstellen der Ebene, die zwei Vektoren zusammen bilden. Wenn ein Vektorprodukt
einen normalen Vektor zur Ebene erstellt, erstellt das externe Produkt
die Ebene selbst . Die Berechnung der Normalen zur Ebene ist irrelevant.
mathbfB= mathbfa wedge mathbfb
mathbfB kann als ein aus Vektoren aufgebautes Parallelogramm dargestellt werden
mathbfa und
mathbfb in der Ebene, die sie zusammen bilden.
Die Idee eines Bivektors mag zunächst seltsam erscheinen, aber bald werden wir sehen, dass sie fast so
grundlegend sind wie die Vektoren selbst . Wenn der Vektor mit einer geraden Linie verglichen werden kann, ist der Bivektor wie eine Ebene ... Die Eigenschaften eines externen Produkts erfassen die wichtigen Eigenschaften von Ebenen.
2.2. Die Basis für Bivektoren
Bivektoren haben wie Vektoren Komponenten. Sie werden jedoch auf der Grundlage von
Ebenen und nicht von
geraden Linien wie Vektoren bestimmt.
Drei orthogonale Grundebenen sind
mathbfx wedge mathbfy ,
mathbfx wedge mathbfz und
mathbfy wedge mathbfz wie wir aus der Abbildung sehen.
Aber zuerst schauen wir uns einen einfacheren zweidimensionalen Fall an ...
2.3. Zweidimensionale Bivektoren
In 2D gibt es nämlich nur eine Ebene
mathbfxy . Das heißt, ein zweidimensionaler Bivektor hat nur eine Komponente. Für einen aus Vektoren zusammengesetzten Bivektor
mathbfa und
mathbfb ist die Nummer
Bxy gleich der Fläche (mit einem Vorzeichen) des durch zwei Vektoren gebildeten Parallelogramms.
mathbfB= mathbfa wedge mathbfb=Bxy( mathbfx wedge mathbfy)
Im Originalartikel mit einem 2D-Bivektor können Sie mit dem interaktiven Diagramm experimentieren, indem Sie die (einzelnen) Vektoren ändern, aus denen er besteht:
Sie können sehen, dass sich der Parallelogrammbereich ändert, wenn sich der Winkel zwischen den Vektoren ändert (entsprechend dem Sinus des Winkels).
Wenn die Vektoren gleich oder parallel sind, bilden sie keine reguläre Ebene und das Ergebnis ist Null. Diese einfache Eigenschaft definiert, was ein Bivektor ist:
mathbfa wedge mathbfa=0
Wenn Sie sich die Summe zweier Vektoren ansehen, sehen Sie, dass die Eigenschaft wie folgt lautet:
\ begin {eqnarray} (\ mathbf {a} + \ mathbf {b}) \ wedge (\ mathbf {a} + \ mathbf {b}) & = & 0 \\ \ mathbf {a} \ wedge \ mathbf { a} + \ mathbf {b} \ wedge \ mathbf {a} + \ mathbf {a} \ wedge \ mathbf {b} + \ mathbf {b} \ wedge \ mathbf {b} & = & 0 \\ \ mathbf { b} \ wedge \ mathbf {a} + \ mathbf {a} \ wedge \ mathbf {b} & = & 0 \ end {eqnarray}
Deshalb:
mathbfa wedge mathbfb=− mathbfb wedge mathbfa
Genau wie die
Drehrichtung ist die Reihenfolge der Argumente in der externen Arbeit wichtig. Durch Neuanordnen der Argumente wird das Vorzeichen des Ergebnisses geändert (dies wird als "Antisymmetrie" bezeichnet).
In der Tabelle wird das Zeichen durch eine Farbe angezeigt, die von blau nach grün wechselt. Das Vorzeichen ändert sich beim Abbiegen
mathbfa in
mathbfb bewegt sich von im Uhrzeigersinn nach gegen den Uhrzeigersinn (d. h. wenn es der Richtung entspricht (von
mathbfx zu
mathbfy ) oder Richtung (von
mathbfy zu
mathbfx )).
Sie können sehen, dass die Eigenschaften des externen Produkts so angeordnet sind, dass sie die Eigenschaften von Ebenen und Kurven vermitteln.
2.4. Zweidimensionale Bivektoren von Nicht-Einheitsvektoren
Offensichtlich müssen Vektoren keine Einheitslänge haben, und diese Einschränkung wurde in diesem Diagramm entfernt:
Die Fläche des Parallelogramms mit einem Vorzeichen ist proportional zur Länge beider Vektoren:
Bxy=sin( alpha) |a | |b | wo
alpha Ist der Winkel zwischen
mathbfa und
mathbfb . Das heißt, wenn beispielsweise die Länge eines Vektors verdoppelt wird, verdoppelt sich die Fläche.
Wir können den wahren Wert erhalten, indem wir die Vektoren als Komponenten einsetzen:
\ begin {eqnarray} \ mathbf {a} \ wedge \ mathbf {b} & = & (a_x \ mathbf {x} + a_y \ mathbf {y}) \ wedge (b_x \ mathbf {x} + b_y \ mathbf { y}) \\ & = & a_x b_x (\ mathbf {x} \ wedge \ mathbf {x}) + a_x b_y (\ mathbf {x} \ wedge \ mathbf {y}) + a_y b_x (\ mathbf {y} \ wedge \ mathbf {x}) + a_y b_y (\ mathbf {y} \ wedge \ mathbf {y}) \\ & = & a_x b_y (\ mathbf {x} \ wedge \ mathbf {y}) + a_y b_x ( \ mathbf {y} \ wedge \ mathbf {x}) \\ & = & a_x b_y (\ mathbf {x} \ wedge \ mathbf {y}) - a_y b_x (\ mathbf {x} \ wedge \ mathbf {y} ) \\ & = & (a_x b_y - a_y b_x) (\ mathbf {x} \ wedge \ mathbf {y}) \ end {eqnarray}
Bxy=axby−bxay
2.5. 3D Bivektoren
Gleich wie Vektorkoordinaten
mathbfv können als
Projektionen des Vektors auf drei orthogonalen Basisachsen betrachtet werden (
mathbfx ,
mathbfy ,
mathbfz ), die Koordinaten des Bivektors
mathbfB kann als
Projektionen betrachtet werden
, die kleiner als eine Ebene auf drei orthogonalen Basisebenen sind.
Die Projektionen des Vektors sind die
Längen dieses Vektors entlang jedes Basisvektors, und die Projektionen des Bivektors sind die
Bereiche der Ebene auf jeder Basisebene.
Für den Vektor:
mathbfv= bbox[5px,Randunten:2pxdurchgehendrot]vx mathbfx+ bbox[5px,Randunten:2pxdurchgehendgrün]vy mathbfy+ bbox[5px,Randunten:2pxdurchgehendblau]vz mathbfz
Für Bivector:
mathbfB= bbox[5px,Randunten:2pxfesteKoralle]Bxy( mathbfx Keil mathbfy)+ bbox[5px,Randunten:2pxmassivesGold]Bxz( mathbfx Wedge mathbfz)+ bbox[5px,Randunten:2pxfestesDarkViolet]Byz( mathbfy wedge mathbfz)
Wo
Bxy ,
Bxz ,
Byz Sind nur Zahlen wie
vx ,
vy ,
vz (Sie werden durch die Farben unterstrichen, die den Farben in der Tabelle entsprechen.)
Die Komponenten eines 3D-Bivektors sind nur drei 2D-Projektionen eines Bivektors auf eine grundlegende 2D-Ebene.
Mit der gleichen Methode wie zuvor stellen wir fest, dass die wahren Werte der Komponenten der XY-Komponente aus dem zweidimensionalen Fall sehr ähnlich sind, jedoch auf alle drei Ebenen angewendet werden:
Bxy=axby−bxay
Bxz=axbz−bxaz
Byz=aybz−byaz
Sie können mit einem 3D-Bivektor in einem interaktiven Diagramm im Originalartikel experimentieren:
HinweisNorm des Bivektors | mathbfB |= | mathbfa wedge mathbfb | wird ähnlich wie die Norm des Vektors bestimmt (die Quadratwurzel der Summe der Quadrate der Komponenten). Dies entspricht der Fläche des gebildeten Parallelogramms mathbfa und mathbfb d.h. | mathbfa wedge mathbfb |= midsin( alpha) mid | mathbfa | | mathbfb | wo alpha - Winkel zwischen mathbfa und mathbfb .
Wenn wir den Bivektor durch seine Norm teilen, reduzieren wir die beiden Längen der Vektoren und den (absoluten) Wert des Sinus des Winkels, dh wir haben den Bivektor
hat mathbfB , die so konstruiert werden, als ob die beiden Vektoren anfangs senkrecht wären und eine Längeneinheit hätten. Dies ist eine sehr saubere Darstellung einer Ebene, die beide Vektoren enthält. Also:
mathbfB=| mathbfa | ||mathbfb | midsin( alpha) mid hat mathbfB
Erinnert Sie etwas an eine externe Arbeit? In 3D ist die Definition einer externen Arbeit der Definition einer Vektorarbeit sehr ähnlich. Tatsächlich hat ein Vektor in 3D, der aus einem Vektorprodukt (zum Beispiel einem normalen Vektor) erhalten wird, drei Komponenten, die den Komponenten des Bivektors entsprechen (die Zahlen sind gleich, aber die Basis ist unterschiedlich).
$$ display $$ \ begin {eqnarray} \ mathbf {a} \ wedge \ mathbf {b} & = & & (a_x b_y - b_x a_y) (\ mathbf {x} \ wedge \ mathbf {y}) \\ & & + & (a_x b_z - b_x a_z) (\ mathbf {x} \ wedge \ mathbf {z}) \\ & & + & (a_y b_z - b_y a_z) (\ mathbf {y} \ wedge \ mathbf {z} ) \\ \\ \ mathbf {a} \ times \ mathbf {b} & = & & (a_x b_y - b_x a_y) \ \ mathbf {z} \\ & & - & (a_x b_z - b_x a_z) \ \ mathbf {y} \\ & & + & (a_y b_z - b_y a_z) \ \ mathbf {x} \ end {eqnarray} $$ display $$
Die Definition eines Bivektors hat eine geometrische Bedeutung und erscheint nicht aus dem Nichts. Ich erinnere mich, dass ich beim Studium von Vektorprodukten dachte: „Was zum Teufel gibt ein Vektor zurück, dessen Länge gleich der Fläche des Parallelogramms ist, das von diesen beiden Vektoren gebildet wird? Es scheint so zufällig. Und warum können wir
den Parallelogrammbereich in die
Länge des Vektors umwandeln? “
2.6. Semantik von Vektoren und Bivektoren
In 3D hat der Bivektor drei Koordinaten, eine pro Ebene: (
mathbfxy ,
mathbfxz und
mathbfyz ) Vektoren haben auch drei Koordinaten, eine pro Achse (
mathbfx ,
mathbfy und
mathbfz ) Jede Ebene ist senkrecht zu einer Achse. Dieser Zufall tritt nur in drei Dimensionen auf
(*) und deshalb
verwechseln wir ständig Bivektoren mit Vektoren .
(*)In 2D gibt es nur einen Basis-Bivektor ( mathbfxy ) und in 3D gibt es 3 grundlegende Bivektoren ( mathbfxy , mathbfxz , mathbfyz ), in 4D gibt es 6 Basisbivektoren ( mathbfxy , mathbfxz , mathbfxw , mathbfyz , mathbfyw , mathbfzw ) usw...
Bei der Programmierung haben beide das gleiche Speicherlayout, aber unterschiedliche Operationen. Die Verwendung eines 3D-Vektors anstelle eines 3D-Bivektors ähnelt einer „Typkonvertierung“ eines Bivektors.
Hier ein Beispiel: Sie können sehen, dass die normalen Vektoren mithilfe der Matrix "Reverse Transfer" anders transformiert werden als gewöhnliche Vektoren
( mathbfMT)−1 anstelle der Matrix selbst. Dies liegt daran, dass es sich tatsächlich nicht um Vektoren handelt, sondern um Bivektoren, die durch "Typumwandlung" in Vektoren umgewandelt werden. In der Physik gibt es einen Hack namens "Axialvektor", der eingeführt wurde, um die vom Vektorprodukt erhaltenen Vektoren von gewöhnlichen Vektoren zu unterscheiden. Ein Bivektor ist ein wahrer „Typ“ eines Objekts und muss entsprechend wahrgenommen und verarbeitet werden.
Trivektoren
Wir können weiterhin ein externes Produkt verwenden, um nicht nur orientierte 2D-Bereiche, sondern auch orientierte 3D-Volumina zu erhalten. Trivector T kann durch zweimaliges Ausführen des externen Produkts erhalten werden:
mathbfT= mathbfa wedge mathbfb wedge mathbfc
Im dreidimensionalen Raum endet alles dort. Wie in 2D, wo nur eine Ebene den gesamten 2D-Raum ausfüllt, gibt es in 3D nur ein Volumen, das den gesamten 3D-Raum ausfüllt.
[Aber in nD können wir weiterhin noch größere externe Produktvektoren erstellen, bis wir die n-te Dimension erreichen. Zum Beispiel haben wir in 4D vier Basis-Trivktoren (3-Vektoren) ( mathbfxyz , mathbfxyw , mathbfxwz , mathbfyzw ) und einen grundlegenden 4-Vektor mathbfxyzw ]]
In 3D hat der Trivector nur eine Grundkomponente ( Txyz ) gleich dem Volumen des durch drei Vektoren gebildeten Parallelepipeds. Das dreifache äußere Produkt ist eine verbesserte Version des skalaren dreifachen Produkts ( ( mathbfa times mathbfb) cdot mathbfc ), da es sich nur um einen Operationstyp handelt, wird der richtige Typ (Volumen anstelle eines Skalars) zurückgegeben und in einer beliebigen Anzahl von Dimensionen ausgeführt.
mathbfT=Txyz mathbfx wedge mathbfy wedge mathbfz
3. Das geometrische Produkt
3.1. Multiplikation von Vektoren aufeinander
Geometrisches Produkt
mathbfab (ohne Symbol bezeichnet) ist eine weitere Operation, die mit Vektoren ausgeführt werden kann. Das geometrische Produkt ist so definiert, dass die Vektoren inverse Größen sind (z.
mathbfa mathbfa−1=1 , wobei 1 nur die Zahl 1 ist!) und bequeme Eigenschaften haben, zum Beispiel Assoziativität (
mathbfa( mathbfb mathbfc)=( mathbfa mathbfb) mathbfc ) Dies dient dazu, Vektoren so multiplizieren zu können, dass (wie bei Matrizen) die Multiplikation geometrischen Operationen entspricht.
HinweisInverse Werte zu haben ist nützlich, egal welches Objekt mathbfa mathbfa−1 Dies wirkt sich nicht auf die Vektoren aus, dh es verhält sich genauso wie beim Multiplizieren der Zahl mit 1.
Um ein Produkt zu definieren, stellen wir zunächst fest, dass es möglich ist, ein Produkt (oder eine Funktion, die zwei Argumente akzeptiert) in die Summe des Teils zu unterteilen, der sich nicht ändert, wenn wir die Argumente und den Teil, der sich ändert, wie folgt austauschen:
\ begin {eqnarray} \ mathbf {a} \ mathbf {b} & = & \ frac {1} {2} (\ mathbf {a} \ mathbf {b} + \ mathbf {a} \ mathbf {b} + \ mathbf {b} \ mathbf {a} - \ mathbf {b} \ mathbf {a}) \\ & = & \ frac {1} {2} (\ mathbf {a} \ mathbf {b} + \ mathbf { b} \ mathbf {a}) + \ frac {1} {2} (\ mathbf {a} \ mathbf {b} - \ mathbf {b} \ mathbf {a}) \ end {eqnarray}
Der erste Term hängt nicht mehr von der Reihenfolge der Argumente ab
mathbfa und
mathbfb (es wird als "symmetrischer" Teil bezeichnet), und der zweite Term ändert das Vorzeichen, wenn die Stellen der Argumente geändert werden (er wird als "antisymmetrischer" Teil bezeichnet).
Das Skalarprodukt zweier Vektoren (auch als inneres Produkt bezeichnet) ist symmetrisch und ein Maß für die Entfernung (
mathbfa cdot mathbfa= | mathbfa |2 ) Aus geometrischer Sicht erscheint es daher sinnvoll, den symmetrischen Teil gleichzusetzen:
frac12( mathbfa mathbfb+ mathbfb mathbfa)= mathbfa cdot mathbfb
In ähnlicher Weise ist das äußere Produkt zweier Vektoren antisymmetrisch, so dass es nützlich wäre, es mit dem antisymmetrischen Teil gleichzusetzen:
frac12( mathbfa mathbfb− mathbfb mathbfa)= mathbfa wedge mathbfb
Zusätzlich enthält das Skalarprodukt den
Kosinus des Winkels zwischen zwei Vektoren (
mathbfa cdot mathbfb= | mathbfa | | mathbfb |cos( alpha) ), während das externe Produkt den
Sinus des Winkels enthält. Zusammen beschreiben sie den Winkel zwischen den Vektoren sowie die Ebene, die sie bilden, vollständig.
HinweisEs ist die Vollständigkeit der Beschreibung, die die Arbeit reversibel macht, weil wir mit Hilfe der in ihrer Arbeit enthaltenen Informationen von einem Vektor zum anderen wechseln können. Wenn ich dir gebe mathbfa und mathbfa mathbfb dann kannst du bekommen mathbfb . Dies ist unmöglich, da nur der Kosinus oder nur der Sinus / die Ebene bekannt ist.
Das heißt, das geometrische Produkt ist gleich:
mathbfa mathbfb= mathbfa cdot mathbfb+ mathbfa wedge mathbfb
Dies ist seltsam, weil das Multiplizieren von zwei Vektoren die Summe von zwei verschiedenen Dingen ergibt: einem Skalar und einem Bivektor. Dies ähnelt jedoch der Art und Weise, wie eine komplexe Zahl die Summe eines Skalars und einer "imaginären" Zahl ist, sodass Sie sich bereits daran gewöhnen können. Hier entspricht der Bivektorteil dem "Imaginärteil" der komplexen Zahl.
Nur ist dies kein "imaginärer" Wert, sondern nur ein Bivektor, den wir wirklich grafisch darstellen können!Wenn wir zwei Vektoren multiplizieren, berechnen wir ihre nützlichen Eigenschaften ("die Länge ihrer Projektionen aufeinander" / "Kosinus des Winkels" ()
mathbfa cdot mathbfb ) und "die Ebene, die sie zusammen bilden" / "der Sinus des Winkels" (
mathbfa wedge mathbfb )), die wir mit einem Pluszeichen verbinden. Ein geometrisches Produkt gibt auch Operationen von „Eigenschaftsgruppen“ an, die auf sie angewendet werden können, und diese Operationen haben geometrische Interpretationen (zum Beispiel: Drehung und Reflexion von Vektoren). Das werden wir bald sehen.
Sie können das geometrische Produkt in Sinus und Cosinus ausdrücken:
mathbfa mathbfb= | mathbfa | | mathbfb |(cos( alpha)+sin( alpha) mathbfB) wo
mathbfB Ist ein Bivektor beider Vektoren in der Ebene, der aus zwei senkrechten Einheitsvektoren besteht.
3.2. Multiplikationstabelle
Die Multiplikationstabelle ermöglicht es uns, das Produkt spezifischer zu machen: Mal sehen, was passiert, wenn wir die Produkte von Basisvektoren erhalten (
mathbfx ,
mathbfy ,
mathbfz )
Für jeden Basisvektor, zum Beispiel eine Achse
mathbfx wird das Ergebnis gleich sein
1 ::
mathbfx mathbfx= mathbfx cdot mathbfx+ mathbfx wedge mathbfx=1
Für jedes Paar von Basisvektoren, zum Beispiel Achsen
mathbfx und
mathbfy Das Ergebnis ist ein Bivektor, den sie zusammen bilden:
mathbfx mathbfy= mathbfx cdot mathbfy+ mathbfx wedge mathbfy= mathbfx wedge mathbfy
(d. h. wir können benennen
mathbfx wedge mathbfy nur
mathbfx mathbfy , da dies ein und dasselbe ist!)
Dies gibt uns die folgende Tabelle:
mathbfa mathbfb | mathbfb |
mathbfx | mathbfy | mathbfz |
mathbfa | mathbfx | 1 | mathbfx mathbfy | mathbfx mathbfz |
mathbfy | − mathbfx mathbfy | 1 | mathbfy mathbfz |
mathbfz | − mathbfx mathbfz | − mathbfy mathbfz | 1 |
Tatsächlich ist diese Tabelle trivial, verglichen beispielsweise mit der Tabelle der Quaternionen.
HinweisHier ist zum Beispiel die Multiplikation zweier Vektoren (5,3,0) und (2,0,1) ::
\ begin {eqnarray} (5 \ mathbf {x} + 3 \ mathbf {y}) (2 \ mathbf {x} + 1 \ mathbf {z}) & = & 5 \ 2 \ \ mathbf {x} \ mathbf {x} + 5 \ 1 \ \ mathbf {x} \ mathbf {z} + 3 \ 2 \ \ mathbf {y} \ mathbf {x} + 3 \ 1 \ \ mathbf {y} \ mathbf {z} \\ & = & 10 + 5 \ \ mathbf {x} \ mathbf {z} - 6 \ \ mathbf {x} \ mathbf {y} + 3 \ \ mathbf {y} \ mathbf {z} \ end {eqnarray}
3.3. Reflexionsformel (traditioneller Look)
Reflexion über einen Vektor [im Originalartikel kann jeder Vektor verschoben werden]Wenn wir einen Einheitsvektor haben
mathbfa und Vektor
mathbfv wir können nachdenken
mathbfv durch eine Ebene senkrecht
mathbfa .
Dies geschieht auf die übliche Weise: Wir teilen
mathbfv auf dem Teil senkrecht zur Ebene:
mathbfv perp=( mathbfv cdot mathbfa) mathbfa und der Teil parallel zur Ebene:
mathbfv parallel= mathbfv− mathbfv perp= mathbfv−( mathbfv cdot mathbfa) mathbfa .
Um den Vektor zu reflektieren, drehen wir dann den senkrechten Teil um und lassen den parallelen Teil unverändert:
\ begin {eqnarray} R _ {\ mathbf {a}} (\ mathbf {v}) & = & \ mathbf {v} _ \ parallel - \ mathbf {v} _ \ perp \\ & = & (\ mathbf { v} - (\ mathbf {v} \ cdot \ mathbf {a}) \ mathbf {a}) - ((\ mathbf {v} \ cdot \ mathbf {a}) \ mathbf {a}) \\ & = & \ mathbf {v} - 2 (\ mathbf {v} \ cdot \ mathbf {a}) \ mathbf {a} \ end {eqnarray}
3.4. Reflexionsformel (Ansicht für geometrisches Produkt)
In dieser Phase können wir das Skalarprodukt ersetzen
mathbfv cdot mathbfa auf seiner Version in Form eines geometrischen Produkts
frac12( mathbfv mathbfa+ mathbfa mathbfv) und erhalten Sie Folgendes:
\ begin {eqnarray} R _ {\ mathbf {a}} (\ mathbf {v}) & = & \ mathbf {v} - 2 (\ frac {1} {2} (\ mathbf {v} \ mathbf {a } + \ mathbf {a} \ mathbf {v})) \ mathbf {a} \\ & = & \ mathbf {v} - \ mathbf {v} \ mathbf {a} ^ 2 - \ mathbf {a} \ mathbf {v} \ mathbf {a} \\ & = & - \ mathbf {a} \ mathbf {v} \ mathbf {a} \ end {eqnarray}
(
mathbfa2= mathbfa cdot mathbfa=1 , als
mathbfa ist ein Einheitsvektor)
Dies gibt uns genau das Gleiche, aber in einem anderen Eintrag. Die Verwendung eines Datensatzes in Form eines einfachen Produkts anstelle einer Formel zum Codieren einer so grundlegenden Operation wie Reflexion ist sehr nützlich!
Wie funktionieren mehrere geometrische Produkte?Wenn Sie nicht verstehen, wie die Mehrfachaufnahme eines geometrischen Produkts funktioniert, sehen Sie sich einfach die Basisvektoren an. Es gibt nur drei mögliche Fälle:
\ begin {eqnarray} \ mathbf {x} (\ mathbf {x} \ mathbf {x}) & = & \ mathbf {x} 1 = \ mathbf {x} \\ \ mathbf {x} (\ mathbf {x } \ mathbf {y}) & = & \ mathbf {x} (\ mathbf {x} \ cdot \ mathbf {y} + \ mathbf {x} \ wedge \ mathbf {y}) = \ mathbf {x} (\ mathbf {x} \ cdot \ mathbf {y}) + \ mathbf {x} \ mathbf {x} \ mathbf {y} = \ mathbf {x} (\ mathbf {x} \ cdot \ mathbf {y}) + \ mathbf {y} \\ \ mathbf {x} (\ mathbf {y} \ mathbf {z}) & = & \ mathbf {x} (\ mathbf {y} \ cdot \ mathbf {z}) + \ mathbf {x } \ mathbf {y} \ mathbf {z} \ end {eqnarray}
Die Ergebnisse sind: Vektor, Vektor, Vektor + Trivektor. Der letztere Fall kann jedoch nur auftreten, wenn alle drei Vektoren unabhängig sind, was niemals zutrifft − mathbfava
DetailsNeugierige können sich ansehen, was in jeder Phase passiert. − mathbfa mathbfv mathbfa in Bezug auf das geometrische Produkt.
- Erste Stufe:
mathbfv mathbfa= mathbfv cdot mathbfa+ mathbfv wedge mathbfa
Wenn wir uns nach wie vor teilen mathbfv zu dem Teil senkrecht zur Ebene ( mathbfv perp ) und der dazu parallele Teil ( mathbfv parallel ), dann bekommen wir:
\ begin {eqnarray} (\ mathbf {v} _ \ perp + \ mathbf {v} _ \ parallel) \ mathbf {a} & = & (\ mathbf {v} _ \ perp + \ mathbf {v} _ \ parallel) \ cdot \ mathbf {a} + (\ mathbf {v} _ \ perp + \ mathbf {v} _ \ parallel) \ wedge \ mathbf {a} \\ & = & \ mathbf {v} _ \ perp \ cdot \ mathbf {a} + \ mathbf {v} _ \ parallel \ cdot \ mathbf {a} + \ mathbf {v} _ \ perp \ wedge \ mathbf {a} + \ mathbf {v} _ \ parallel \ wedge \ mathbf {a} \ end {eqnarray}
mathbfv parallel cdot mathbfa=0 , weil diese Vektoren senkrecht sind und mathbfv perp wedge mathbfa=0 weil diese Vektoren parallel sind.
mathbfv mathbfa= mathbfv perp cdot mathbfa+ mathbfv parallel wedge mathbfa
Der erste Term ist nur die Länge der Projektion mathbfv auf mathbfa d.h. Der erste Term ist nur die Länge mathbfv perp .
Rufen wir an hat mathbfv parallel normalisierte Version mathbfv parallel , also mathbfv parallel= hat mathbfv parallel | mathbfv parallel | . Dann ist der zweite Term nur ein Bivektor mathbfB= hat mathbfv parallel wedge mathbfa mal die Länge mathbfv parallel .
Dieser Bivektor mathbfB zusammengesetzt aus zwei senkrechten Einheitsvektoren, d. h. dies ist eine sehr saubere Darstellung der Vektorebene mathbfa und mathbfv . Es enthält keine Informationen über ihren relativen Winkel oder ihre Länge, sondern nur die Ausrichtung der Ebene.
Das heißt, beide Begriffe sind nur Zerlegungen mathbfv auf zwei orthogonalen Projektionen ( mathbfv parallel und mathbfv perp ) sowie die Ebene, die sie bilden ( mathbfB ):
| mathbfv perp |+ | mathbfv parallel | mathbfB
Bevor wir mit dem nächsten Schritt fortfahren, können wir das externe Produkt durch ein geometrisches ersetzen, weil mathbfa und mathbfv parallel sind senkrecht und daher ist ihr äußeres und geometrisches Produkt äquivalent (da der Teil mit dem Skalarprodukt aus ihrem geometrischen Produkt gleich Null ist).
mathbfv perp cdot mathbfa+ mathbfv parallel wedge mathbfa= mathbfv perp cdot mathbfa+ mathbfv parallel mathbfa
- Die zweite Stufe wird wie folgt sein:
mathbfa mathbfv mathbfa= mathbfa( mathbfv perp cdot mathbfa)+ mathbfa mathbfv parallel mathbfa
Das erste Mitglied ist nur eine Komponente mathbfv entlang mathbfa d.h. Komponente mathbfv senkrecht zur Ebene. Mit anderen Worten, der erste Begriff ist gerecht mathbfv perp .
mathbfa mathbfv mathbfa= mathbfv perp+ mathbfa mathbfv parallel mathbfa
Als mathbfa und mathbfv parallel (wieder) senkrecht, ihr geometrisches Produkt ist einfach ihr äußeres Produkt, dh Sie können sie austauschen und das Vorzeichen ändern.
\ begin {eqnarray} \ mathbf {a} \ mathbf {v} \ mathbf {a} & = & \ mathbf {v} _ \ perp - \ mathbf {v} _ \ parallel \ mathbf {a} \ mathbf {a } \\ & = & \ mathbf {v} _ \ perp - \ mathbf {v} _ \ parallel \ end {eqnarray}
- Und schließlich dreht die letzte Stufe das Schild um:
− mathbfa mathbfv mathbfa=− mathbfv perp+ mathbfv parallel
Das heißt, wir sehen, dass die Komponente mathbfv senkrecht zur Ebene, auf den Kopf gestellt, aber der parallele Teil bleibt gleich!
HinweisLänge mathbfa nicht sehr wichtig, also ignorieren wir es weiter unten, aber wenn mathbfa ist kein Einheitsvektor, dann müssen wir durch seine Länge teilen und die Formel wird zu − mathbfa mathbfv mathbfa−1 , das eher wie ein „Schichtprodukt“ ist, an das man sich hätte gewöhnen sollen.
3.5. Zwei Reflexionen sind eine Wendung: die Situation in 2D
Es stellt sich heraus, dass, wenn wir uns bewerben
mathbfv zwei aufeinanderfolgende Reflexionen (zuerst mit einem Vektor
mathbfa und dann mit dem Vektor
mathbfb ), dann erhalten wir eine
Drehung im doppelten Winkel zwischen den Vektoren mathbfa und mathbfb .Wir können jede nachfolgende Reflexionsstufe in der folgenden Grafik zeigen:
Sie können auch Vektoren im Originalartikel ändern.
mathbfa ,
mathbfb und
mathbfv Die anfängliche Konfiguration der Vektoren im Diagramm (klicken Sie auf die Schaltfläche „Vektorpositionen zurücksetzen“) zeigt jedoch besonders deutlich, warum die Drehung dadurch in einem
doppelten Winkel erfolgt. Eine andere gute Konfiguration ist die Einstellung als
mathbfa und
mathbfb Achsen
mathbfx und
mathbfy .
3.6. Zwei Reflexionen sind eine Wendung: die Situation in 3D
Im Fall von 3D-Vektor
mathbfv kann in zwei Teile unterteilt werden, von denen einer auf der angegebenen Ebene liegt
mathbfa und
mathbfb und der andere liegt außerhalb der Ebene (senkrecht dazu). Wie in der folgenden Grafik gezeigt, bleibt der äußere Teil des Vektors gleich, wenn er von jeder der Ebenen reflektiert wird. Was das Innere betrifft, sind wir wieder in 2D und es dreht sich nur um den doppelten Winkel!
3.7. Rotoren
Aus Sicht des geometrischen Produkts entsprechen zwei Reflexionen einfach dem Folgenden:
R mathbfb(R mathbfa( mathbfv))=− mathbfb(− mathbfa mathbfv mathbfa) mathbfb= mathbfb mathbfa mathbfv mathbfa mathbfb
Wir rufen an
mathbfa mathbfb= mathbfa cdot mathbfb+ mathbfa wedge mathbfb Rotor weil multipliziert mit
mathbfa mathbfb Auf beiden Seiten des Vektors führen wir eine Rotation durch (
mathbfb mathbfa Ist das gleiche wie
mathbfa mathbfb , nur im umgekehrten Teilbivektor).
Rotoranwendung
mathbfa mathbfb zu beiden Seiten des Vektors dreht sich dieser Vektor in der Ebene der Vektoren
mathbfa und
mathbfb doppelter Winkel zwischen
mathbfa und
mathbfb .
Und das ist alles!Vergleich von 3D-Rotoren und Quaternionen
Sie können sehen, dass 3D-Rotoren Quaternionen sehr ähnlich sehen:
a+Bxy mathbfx wedge mathbfy+Bxz mathbfx wedge mathbfz+Byz mathbfy Keil mathbfz
a+b mathbfi+c mathbfj+d mathbfk
In der Tat ist der Code / Mathe ziemlich gleich! Der Hauptunterschied ist das
mathbfi ,
mathbfj und
mathbfk ersetzt durch
mathbfy wedge mathbfz ,
mathbfx wedge mathbfz und
mathbfx wedge mathbfy aber sie funktionieren im Grunde gleich. Codevergleich finden Sie
hier . Ich habe nicht alles implementiert, zum Beispiel log / exp für die Interpolation, aber sie sind recht einfach zu erstellen.
Wie wir jedoch gesehen haben, sind 3D-Rotoren ein dreidimensionales Konzept, für dessen Visualisierung keine „vierdimensionalen Doppelwindungen“ oder „stereografische Projektion“ erforderlich sind. Der Versuch, in 4D laufende Quaternionen zu visualisieren, um 3D-Rotationen zu erklären, ist ein bisschen wie der Versuch, die Planetenbewegung aus geozentrischer Sicht zu verstehen. Das heißt, Dieser Ansatz ist zu kompliziert, weil wir ihn aus der falschen Perspektive betrachten.
Wie wir gesehen haben, hilft uns die Modellierung von Rotationen, die in Ebenen statt um Vektoren auftreten, sehr. Zum Beispiel geben die Quadrate der Basisbivektoren an
−1 , genau wie die grundlegenden Quaternionen (
mathbfi2= mathbfj2= mathbfk2=−1 ):
( mathbfx mathbfy)2=( mathbfx mathbfy)( mathbfx mathbfy)=−( mathbfy mathbfx)( mathbfx mathbfy)=− mathbfy( mathbfx mathbfx) mathbfy=− mathbfy mathbfy=−1
Das Multiplizieren von zwei Bivektoren miteinander ergibt einen dritten Bivektor, aber tatsächlich ist es trivial, und wir müssen uns nicht daran erinnern
mathbfi mathbfj= mathbfk ::
( mathbfx mathbfy)( mathbfy mathbfz)= mathbfx( mathbfy mathbfy) mathbfz= mathbfx mathbfz
(Beachten Sie, dass wir verwendet haben
mathbfx wedge mathbfy= mathbfx mathbfy )
Diese Eigenschaften sind das Ergebnis eines geometrischen Produkts und entstehen nicht aus dem Nichts!
Zusätzliche Lektüre
(Übrigens gibt es in der geometrischen Algebra nicht nur Rotoren, sondern auch andere coole Dinge!)
- Lineare und geometrische Algebra von Macdonald [ Link zu Amazon ]
Eine ausgezeichnete Quelle, sehr klar und verständlich, da impliziert wurde, dass sie das Lehrbuch der linearen Algebra für Schüler ersetzen würde. - Geometrische Algebra für die Informatik von Dorst et al. [ Link zu Amazon ]
Eine großartige Quelle, da Sie mit der Programmierung manchmal das Thema besser verstehen können.Hinweis: In diesem Buch machen die Autoren deutlich, dass die geometrische Algebra langsamer ist als Quaternionen (und dergleichen ...). Tatsächlich sollte es ungefähr den gleichen Code haben (d. H. Sie sollten keinen Code für die geometrische Algebra schreiben und eine verallgemeinerte Struktur erstellen, die alle möglichen Arten von k-Vektoren enthalten kann. Schreiben Sie bei Bedarf einfach eine Struktur für jeden Typ von k-Vektoren Das heißt, um die Quaternionen zu ersetzen, können Sie eine Bivector-Struktur und eine Rotor-Struktur (Skalar + Bivector) schreiben.