Les programmeurs graphiques utilisent des
quaternions pour enregistrer des virages en trois dimensions. Cependant, les
quaternions sont difficiles à comprendre car ils sont étudiés superficiellement . Nous prenons simplement d'étranges tables de multiplication et d'autres définitions cryptiques sur la foi, et les utilisons comme des «boîtes noires» qui font tourner les vecteurs selon nos besoins. Pourquoi
mathbfi2= mathbfj2= mathbfk2=−1 et
mathbfi mathbfj= mathbfk ? Pourquoi prenons-nous un vecteur et le transformons-nous en un vecteur "imaginaire" pour le transformer, par exemple
mathbfq(x mathbfi+y mathbfj+z mathbfk) mathbfq∗ ? Mais peu importe si tout fonctionne, non?
Il existe un moyen de décrire les rotations appelées
rotor , qui fait référence au domaine des nombres complexes (en 2D) et des quaternions (en 3D), et se généralise même à n'importe quel nombre de dimensions.
Nous pouvons créer des rotors
presque entièrement à partir de zéro , au lieu de définir des quaternions à partir de rien et d'essayer d'expliquer comment ils fonctionnent
rétroactivement . Cela prend plus de temps, mais cela me semble utile, car ils sont beaucoup plus faciles à comprendre!
De plus, pour la visualisation et la compréhension des rotors tridimensionnels, il n'est pas nécessaire d'utiliser la quatrième dimension spatiale.
Ce serait formidable s'ils commençaient à supplanter l'utilisation et l'étude des quaternions, en les remplaçant par des rotors. Les remplacer est très simple, mais le
code restera presque le même . Tout ce qui peut être fait avec des quaternions, par exemple l'interpolation et la suppression des verrous d'essieu (serrure à cardan), peut être fait avec des rotors.
Mais nous commençons à comprendre beaucoup plus.(Dans l'article d'origine, tous les graphiques sont interactifs et l'article est suivi d'une vidéo. En cliquant sur les boutons de lecture, vous pouvez démarrer la section correspondante de la vidéo. Vous pouvez également cliquer sur le bouton de transition sous la vidéo pour accéder à la section correspondante de l'article. Vous pouvez agrandir la fenêtre pour qu'il y ait plus d'espace pour la vidéo. ou définissez-en une taille constante.)
1. Avions tournants
1.1. Les virages sont effectués sur des plans bidimensionnels.
Dans l'espace tridimensionnel, nous percevons généralement les virages comme se produisant autour des axes, comme une roue tournant sur un axe, mais il serait plutôt plus correct de représenter le plan sur lequel se trouve la roue. Ce plan est perpendiculaire à l'axe.
Cette vieille femme tourne une roue dans l'avion mathbfxz perpendiculaire à l'axe mathbfy .Cela se produit parce que si nous divisons le vecteur en deux parties, dont l'une se trouve sur le plan (
mathbfv parallel ), et l'autre est à l'extérieur (
mathbfv perp ), puis la rotation fait tourner la partie intérieure et l'extérieur reste inchangé.
Rotation dans l'avion yx [ dans l'article original cette animation et la caméra peuvent être déplacées ]Dans l'espace bidimensionnel, il n'y a qu'un seul plan dans lequel la rotation est possible (
il n'y a pas de partie externe ). Par conséquent, supposer que des rotations se produisent autour du troisième axe (perpendiculaire au plan 2D) est strictement incorrect, car pour terminer les rotations, nous ne devons pas ajouter une autre dimension.
Si nous parlons au «propriétaire de terrain plat» bidimensionnel (qui vit à l'intérieur du plan 2D et n'est jamais sorti de l'espace bidimensionnel) de l'axe de rotation perpendiculaire, alors il demanderait: «Dans quelle direction cet axe pointe-t-il? Je ne peux pas l'imaginer! "
RemarqueEt dans des dimensions supérieures (4D et plus), il est impossible de déterminer un vecteur normal au plan 2D (par exemple, dans 4D, le plan 2D a deux directions de normales, dans 5D il y a trois directions de normales, et dans nD leur n−2 )
1.2. La direction exacte des virages
De plus, quand on pense à la rotation autour d'un axe, le sens de rotation n'est pas défini, et donc il doit être déterminé par une règle (dite "règle de droite").
Cependant, si nous supposons que les virages se produisent à l'intérieur des plans, alors la direction devient claire: rotation dans le plan
mathbfxy signifie une rotation qui déplace un vecteur (unité)
mathbfx au vecteur (unité)
mathbfy à l'intérieur de l'avion, ils forment ensemble. Rotation dans l'avion
mathbfyx Est une rotation dans le sens opposé: elle déplace le vecteur
mathbfy au vecteur
mathbfx .
RemarqueJe me souviens que lorsque j'ai découvert pour la première fois trois matrices de rotations 3D le long de plans orthogonaux, j'ai d'abord pensé: qu'est-ce qu'une matrice mathbfRy a le signe opposé? Cela est dû à la règle de la main droite, selon laquelle nous devons déterminer la rotation autour de l'axe mathbfy de sorte qu'il va de mathbfz à mathbfx pas de mathbfx à mathbfz pour maintenir un sens de rotation "droitier" constant. Lorsque nous commençons à parler directement de l'avion lui-même, cette règle devient inutile.
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, border-bottom: 2px solid red] {\ \} sin (\ theta) \\ 0 & 1 & 0 \\ \ bbox [5px, border-bottom: 2px solid red] {-} 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. Bivecteurs
2.1. Travail externe
Pour calculer l'axe de rotation lors de la rotation d'un vecteur
mathbfa vers un autre vecteur
mathbfb nous prenons le produit vectoriel de deux vecteurs pour obtenir un vecteur perpendiculaire aux deux. Mais pourquoi devons-nous «quitter» l'avion si la rotation est essentiellement une opération bidimensionnelle?
Au lieu de cela, nous prenons ce qu'on appelle
un produit externe (également connu sous le nom de produit vectoriel bidimensionnel), deux vecteurs, créant un nouvel élément appelé «bivecteur» (ou 2 vecteurs)
mathbfB représentant le plan que deux vecteurs forment ensemble. Si un produit vectoriel crée
un vecteur normal au plan, le produit externe crée
le plan lui-même . Le calcul de la normale au plan est sans importance.
mathbfB= mathbfa wedge mathbfb
mathbfB peut être représenté comme un parallélogramme construit à partir de vecteurs
mathbfa et
mathbfb dans le plan qu'ils forment ensemble.
Au début, l'idée d'un bivecteur peut sembler étrange, mais bientôt nous verrons qu'ils sont presque aussi
fondamentaux que les vecteurs eux-mêmes . Si le vecteur peut être comparé à une ligne droite, alors le bivecteur est similaire à un avion ... Les propriétés d'un produit externe capturent les propriétés importantes des avions.
2.2. La base des bivecteurs
Les bivecteurs, comme les vecteurs, ont des composants. Mais ils sont déterminés sur la base d'
avions et non de
lignes droites , comme des vecteurs.
Trois plans basaux orthogonaux sont
mathbfx wedge mathbfy ,
mathbfx wedge mathbfz et
mathbfy wedge mathbfz comme nous le voyons sur la figure.
Mais d'abord, regardons un cas bidimensionnel plus simple ...
2.3. Bivecteurs bidimensionnels
En 2D, il n'y a qu'un seul plan, à savoir
mathbfxy . C'est-à-dire qu'un bivecteur bidimensionnel n'a qu'un seul composant. Pour un bivecteur composé de vecteurs
mathbfa et
mathbfb est le nombre
Bxy égale à l'aire (avec un signe) du parallélogramme formée par deux vecteurs.
mathbfB= mathbfa wedge mathbfb=Bxy( mathbfx wedge mathbfy)
Dans l'article original avec un bivecteur 2D, vous pouvez expérimenter sur le graphique interactif en changeant les vecteurs (simples) qui le composent:
Vous pouvez voir que lorsque l'angle entre les vecteurs change, la zone du parallélogramme change (conformément au sinus de l'angle).
Si les vecteurs sont identiques ou parallèles, alors ils ne forment pas un plan régulier et le résultat sera nul. Cette propriété simple définit ce qu'est un bivecteur:
mathbfa wedge mathbfa=0
En regardant la somme de deux vecteurs, vous pouvez voir que la propriété suit:
\ 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}
Par conséquent:
mathbfa wedge mathbfb=− mathbfb wedge mathbfa
Tout comme le
sens de rotation , l'ordre des arguments dans le travail externe est important. La réorganisation des arguments modifie le signe du résultat (c'est ce qu'on appelle "l'antisymétrie").
Sur le graphique, le signe est indiqué par une couleur qui passe du bleu au vert. Le signe change lorsque le tour de
mathbfa dans
mathbfb se déplace du sens horaire au sens antihoraire (c'est-à-dire s'il correspond à la direction
mathbfx à
mathbfy ) ou direction (de
mathbfy à
mathbfx )).
Vous pouvez voir que les propriétés du produit externe sont disposées de manière à transmettre les propriétés des plans et des virages.
2.4. Bivecteurs bidimensionnels de vecteurs non unitaires
De toute évidence, les vecteurs n'ont pas à être de longueur unitaire, et cette restriction a été supprimée sur ce graphique:
L'aire du parallélogramme avec un signe est proportionnelle aux longueurs des deux vecteurs:
Bxy=sin( alpha) |a | |b | où
alpha L'angle entre
mathbfa et
mathbfb . C'est, par exemple, lorsque vous doublez la longueur d'un vecteur, la zone double.
Nous pouvons obtenir la vraie valeur en substituant les vecteurs comme composants:
\ 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. Bivecteurs 3D
Identique aux coordonnées vectorielles
mathbfv peuvent être considérées comme des
projections du vecteur sur trois axes de base orthogonaux (
mathbfx ,
mathbfy ,
mathbfz ), les coordonnées du bivecteur
mathbfB peut être considérée comme des
projections plus petites qu'un plan sur trois plans basaux orthogonaux.
Les projections du vecteur sont les
longueurs de ce vecteur le long de chaque vecteur de base, et les projections du bivecteur sont les
zones du plan sur chaque plan de base.
Pour le vecteur:
mathbfv= bbox[5px,bordureinférieure:2pxrougecontinu]vx mathbfx+ bbox[5px,bordureinférieure:2pxvertuni]vy mathbfy+ bbox[5pixels,bordinférieur:2pixelsbleufixe]vz mathbfz
Pour bivecteur:
mathbfB= bbox[5px,border−bottom:2pxcorailsolide]Bxy( mathbfx wedge mathbfy)+ bbox[5px,border−bottom:2pxormassif]Bxz( mathbfx wedge mathbfz)+ bbox[5px,bordureinférieure:2pxsolidDarkViolet]Byz( mathbfy wedge mathbfz)
O Where
Bxy ,
Bxz ,
Byz Sont juste des nombres comme
vx ,
vy ,
vz (ils sont soulignés par les couleurs correspondant aux couleurs du graphique).
Les composants d'un bivecteur 3D ne sont que trois projections 2D d'un bivecteur sur un plan 2D de base.
En utilisant la même méthode que précédemment, nous constatons que les vraies valeurs des composants ressemblent beaucoup au composant XY du cas bidimensionnel, mais appliquées aux trois plans:
Bxy=axby−bxay
Bxz=axbz−bxaz
Byz=aybz−byaz
Vous pouvez expérimenter avec un bivecteur 3D sur un graphique interactif dans l'article d'origine:
RemarqueNorme de bivecteur | mathbfB |= | mathbfa wedge mathbfb | est déterminée de manière similaire à la norme du vecteur (la racine carrée de la somme des carrés des composants). Ceci est égal à l'aire du parallélogramme formé mathbfa et mathbfb , c'est-à-dire | mathbfa wedge mathbfb |= midsin( alpha) mid | mathbfa | | mathbfb | où alpha - angle entre mathbfa et mathbfb .
Si nous divisons le bivecteur par sa norme, alors nous réduisons les deux longueurs des vecteurs et la valeur (absolue) du sinus de l'angle, c'est-à-dire que nous aurons le bivecteur
hat mathbfB , qui sera construit comme si les deux vecteurs étaient initialement perpendiculaires et avaient une longueur unitaire. Il s'agit d'une représentation très nette d'un plan contenant les deux vecteurs. Donc:
mathbfB=| mathbfa | ||mathbfb | midsin( alpha) mid hat mathbfB
Est-ce que quelque chose vous rappelle un travail extérieur? En 3D, la définition d'une œuvre externe est très similaire à la définition d'une œuvre vectorielle. En fait, un vecteur en 3D obtenu à partir d'un produit vectoriel (par exemple, un vecteur normal) aura trois composantes égales aux composantes du bivecteur (les nombres seront les mêmes, mais la base est différente).
$$ afficher $$ \ 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 $$
La définition d'un bivecteur a une signification géométrique et n'apparaît pas de nulle part. Je me souviens que lorsque j'étudiais les produits vectoriels, je me disais: «Mais qu'est-ce que ça renvoie un vecteur dont la longueur est égale à l'aire du parallélogramme formé par ces deux vecteurs? Cela semble tellement aléatoire. Et pourquoi pouvons-nous transformer
la zone du parallélogramme en
longueur du vecteur? »
2.6. Sémantique des vecteurs et bivecteurs
En 3D, le bivecteur a trois coordonnées, une par plan: (
mathbfxy ,
mathbfxz et
mathbfyz ) Les vecteurs ont également trois coordonnées, une par axe (
mathbfx ,
mathbfy et
mathbfz ) Chaque plan est perpendiculaire à un axe. Cette coïncidence n'apparaît qu'en trois dimensions
(*) et c'est pourquoi
nous confondons constamment bivecteurs et vecteurs .
(*)En 2D, il n'y a qu'un seul bivecteur de base ( mathbfxy ), et en 3D, il existe 3 bivecteurs de base ( mathbfxy , mathbfxz , mathbfyz ), dans 4D il y a 6 bivecteurs de base ( mathbfxy , mathbfxz , mathbfxw , mathbfyz , mathbfyw , mathbfzw ) et ainsi de suite ...
En programmation, ils ont tous deux la même disposition de mémoire, mais des opérations différentes. L'utilisation d'un vecteur 3D au lieu d'un bivecteur 3D est similaire à une «conversion de type» d'un bivecteur.
Voici un exemple: vous pouvez voir que les vecteurs normaux sont transformés différemment des vecteurs ordinaires en utilisant la matrice de «transfert inverse»
( mathbfMT)−1 , au lieu de la matrice elle-même. En effet, ce ne sont en fait pas des vecteurs, mais des bivecteurs, qui sont transformés en vecteurs par "conversion de type". En physique, il existe un hack appelé «vecteur axial», qui a été introduit afin de distinguer les vecteurs obtenus par le produit vectoriel des vecteurs ordinaires. Un bivecteur est un véritable «type» d'objet et doit être perçu et traité en conséquence.
Trivectors
Nous pouvons continuer à prendre un produit externe pour obtenir non seulement des zones 2D orientées, mais aussi des volumes 3D orientés. Trivector T peut être obtenu en faisant le produit externe deux fois:
mathbfT= mathbfa wedge mathbfb wedge mathbfc
Dans l'espace tridimensionnel, tout s'arrête là. Comme en 2D, où il n'y a qu'un seul plan remplissant tout l'espace 2D, en 3D, il n'y a qu'un seul volume remplissant tout l'espace 3D.
[Mais dans nD, nous pouvons continuer à créer des vecteurs de produits externes encore plus grands jusqu'à atteindre la nième dimension. Par exemple, dans 4D, nous avons quatre trivcteurs de base (3 vecteurs) ( mathbfxyz , mathbfxyw , mathbfxwz , mathbfyzw ) et un quadruple vecteur de base mathbfxyzw ]
En 3D, le trivector n'a qu'un seul composant de base ( Txyz ) égal au volume du parallélépipède formé par trois vecteurs. Le triple produit externe est une version améliorée du triple produit scalaire ( ( mathbfa times mathbfb) cdot mathbfc ), car il n'implique qu'un seul type d'opération, il renvoie le type correct (volume au lieu d'un scalaire) et fonctionne dans n'importe quel nombre de dimensions.
mathbfT=Txyz mathbfx wedge mathbfy wedge mathbfz
3. Le produit géométrique
3.1. Multiplication des vecteurs les uns sur les autres
Produit géométrique
mathbfab (notée sans symbole) est une autre opération qui peut être effectuée avec des vecteurs. Le produit géométrique est défini de sorte que les vecteurs soient des quantités inverses (par ex.
mathbfa mathbfa−1=1 , où 1 est juste le nombre 1!) et ont des propriétés pratiques, par exemple, l'associativité (
mathbfa( mathbfb mathbfc)=( mathbfa mathbfb) mathbfc ) Le but de ceci est de pouvoir multiplier les vecteurs pour que (comme c'est le cas avec les matrices) la multiplication corresponde aux opérations géométriques.
RemarqueAvoir des valeurs inverses est utile car quel que soit l'objet mathbfa mathbfa−1 , cela n'affectera pas les vecteurs, c'est-à-dire qu'il se comportera de la même manière que lors de la multiplication du nombre par 1.
Pour définir un produit, on note d'abord qu'il est possible de diviser un produit (ou n'importe quelle fonction qui prend deux arguments) en la somme de la partie qui ne change pas si on échange les arguments et la partie qui change comme suit:
\ 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}
Le premier terme ne dépend plus de l'ordre des arguments
mathbfa et
mathbfb (on l'appelle la partie "symétrique"), et le second terme change de signe lors du changement de place des arguments (on l'appelle la partie "antisymétrique").
Le produit scalaire de deux vecteurs (également appelé produit interne) est symétrique et est une mesure de distance (
mathbfa cdot mathbfa= | mathbfa |2 ), donc, d'un point de vue géométrique, il semble utile de le rendre égal à la partie symétrique:
frac12( mathbfa mathbfb+ mathbfb mathbfa)= mathbfa cdot mathbfb
De même, le produit extérieur de deux vecteurs est antisymétrique, il serait donc utile de l'assimiler à la partie antisymétrique:
frac12( mathbfa mathbfb− mathbfb mathbfa)= mathbfa wedge mathbfb
De plus, le produit scalaire contient le
cosinus de l' angle entre deux vecteurs (
mathbfa cdot mathbfb= | mathbfa | | mathbfb |cos( alpha) ), tandis que le produit externe contient le
sinus de l' angle. Ensemble, ils décrivent pleinement l'angle entre les vecteurs, ainsi que le plan qu'ils forment.
RemarqueC'est l'intégralité de la description qui rend le travail réversible, car on peut passer d'un vecteur à l'autre à l'aide des informations contenues dans leur travail. Si je te donne mathbfa et mathbfa mathbfb alors vous pouvez obtenir mathbfb . C'est impossible à faire, ne connaissant que le cosinus ou seulement le sinus / plan.
Autrement dit, le produit géométrique est égal à:
mathbfa mathbfb= mathbfa cdot mathbfb+ mathbfa wedge mathbfb
C'est étrange car multiplier deux vecteurs donne la somme de deux choses différentes: un scalaire et un bivecteur. Cependant, cela est similaire à la façon dont un nombre complexe est la somme d'un nombre scalaire et d'un nombre "imaginaire", vous pouvez donc déjà vous y habituer. Ici, la partie bivector correspond à la partie "imaginaire" du nombre complexe.
Seulement ce n'est pas une valeur "imaginaire", c'est juste un bivecteur que l'on peut vraiment montrer graphiquement!En fait, en multipliant deux vecteurs, nous calculons leurs propriétés utiles («la longueur de leurs projections l'une sur l'autre» / «cosinus de l'angle» (
mathbfa cdot mathbfb ) et «le plan qu'ils forment ensemble» / «le sinus de l'angle» (
mathbfa wedge mathbfb )), que nous connectons ensemble avec un signe plus. Un produit géométrique donne également des opérations de «groupes de propriétés» qui peuvent leur être appliquées, et ces opérations ont des interprétations géométriques (par exemple: rotation et réflexion de vecteurs). Nous le verrons bientôt.
Vous pouvez exprimer le produit géométrique en termes de sinus et cosinus:
mathbfa mathbfb= | mathbfa | | mathbfb |(cos( alpha)+sin( alpha) mathbfB) où
mathbfB Est un bivecteur des deux vecteurs sur le plan, composé de deux vecteurs perpendiculaires unitaires.
3.2. Table de multiplication
Le tableau de multiplication nous permet de rendre le produit plus spécifique: voyons ce qui se passe si on obtient les produits des vecteurs de base (
mathbfx ,
mathbfy ,
mathbfz )
Pour tout vecteur de base, par exemple un axe
mathbfx , le résultat sera égal
1 :
mathbfx mathbfx= mathbfx cdot mathbfx+ mathbfx wedge mathbfx=1
Pour toute paire de vecteurs de base, par exemple, les axes
mathbfx et
mathbfy , le résultat sera un bivecteur qui, ensemble, ils forment:
mathbfx mathbfy= mathbfx cdot mathbfy+ mathbfx wedge mathbfy= mathbfx wedge mathbfy
(c'est-à-dire que nous pouvons nommer
mathbfx wedge mathbfy juste
mathbfx mathbfy , car c'est la même chose!)
Cela nous donne le tableau suivant:
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 |
En fait, ce tableau est trivial, comparé, par exemple, au tableau des quaternions.
RemarquePar exemple, voici la multiplication de deux vecteurs (5,3,0) et (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. Formule de réflexion (aspect traditionnel)
Réflexion sur un vecteur [dans l'article d'origine, chaque vecteur peut être déplacé]Si nous avons un vecteur unitaire
mathbfa et vecteur
mathbfv nous pouvons réfléchir
mathbfv à travers un plan perpendiculaire
mathbfa .
Cela se fait de la manière habituelle: nous partageons
mathbfv sur la partie perpendiculaire au plan:
mathbfv perp=( mathbfv cdot mathbfa) mathbfa , et la partie parallèle au plan:
mathbfv parallel= mathbfv− mathbfv perp= mathbfv−( mathbfv cdot mathbfa) mathbfa .
Ensuite, afin de refléter le vecteur, nous inversons la partie perpendiculaire et laissons la partie parallèle inchangée:
\ 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. Formule de réflexion (vue pour produit géométrique)
A ce stade, nous pouvons remplacer le produit scalaire
mathbfv cdot mathbfa sur sa version sous forme de produit géométrique
frac12( mathbfv mathbfa+ mathbfa mathbfv) et obtenez les éléments suivants:
\ 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 depuis
mathbfa est un vecteur unitaire)
Cela nous donne exactement la même chose, mais dans une entrée différente. Utiliser un enregistrement sous la forme d'un produit simple au lieu d'une formule pour encoder une opération aussi fondamentale que la réflexion sera très utile!
Comment fonctionnent plusieurs produits géométriques?Si vous ne comprenez pas comment fonctionne la prise multiple d'un produit géométrique, regardez simplement les vecteurs de base. Il n'y a que trois cas possibles:
\ 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}
Les résultats seront: vector, vector, vector + trivector. Cependant, ce dernier cas ne peut se produire que lorsque les trois vecteurs sont indépendants, ce qui n'est jamais vrai pour − mathbfava
DétailsLes personnes curieuses peuvent voir ce qui se passe à chaque étape. − mathbfa mathbfv mathbfa en termes de produit géométrique.
- Première étape:
mathbfv mathbfa= mathbfv cdot mathbfa+ mathbfv wedge mathbfa
Si, comme avant, nous divisons mathbfv à la partie perpendiculaire au plan ( mathbfv perp ), et la partie qui lui est parallèle ( mathbfv parallel ), on obtient alors:
\ begin {eqnarray} (\ mathbf {v} _ \ perp + \ mathbf {v} _ \ parallel) \ mathbf {a} & = & (\ mathbf {v} _ \ perp + \ mathbf {v} _ \ parallèle) \ 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 , car ces vecteurs sont perpendiculaires, et mathbfv perp wedge mathbfa=0 parce que ces vecteurs sont parallèles.
mathbfv mathbfa= mathbfv perp cdot mathbfa+ mathbfv parallel wedge mathbfa
Le premier terme est juste la longueur de la projection mathbfv sur mathbfa , c'est-à-dire le premier terme est juste la longueur mathbfv perp .
Appelons hat mathbfv parallel version normalisée mathbfv parallel c'est mathbfv parallel= hat mathbfv parallel | mathbfv parallel | . Ensuite, le deuxième terme est juste un bivector mathbfB= hat mathbfv parallel wedge mathbfa fois la longueur mathbfv parallel .
Ce bivecteur mathbfB composé de deux vecteurs unitaires perpendiculaires, c'est-à-dire qu'il s'agit d'une représentation très nette du plan des vecteurs mathbfa et mathbfv . Il ne contient pas d'informations sur leur angle relatif ou leurs longueurs, uniquement sur l'orientation du plan.
Autrement dit, les deux termes ne sont que des décompositions mathbfv sur deux projections orthogonales ( mathbfv parallel et mathbfv perp ), ainsi que le plan qu'ils forment ( mathbfB ):
| mathbfv perp |+ | mathbfv parallel | mathbfB
Avant de passer à l'étape suivante, nous pouvons remplacer le produit externe par un produit géométrique, car mathbfa et mathbfv parallel sont perpendiculaires, et donc leur produit externe et géométrique seront équivalents (puisque la partie avec le produit scalaire de leur produit géométrique est égale à zéro).
mathbfv perp cdot mathbfa+ mathbfv parallel wedge mathbfa= mathbfv perp cdot mathbfa+ mathbfv parallel mathbfa
- La deuxième étape sera la suivante:
mathbfa mathbfv mathbfa= mathbfa( mathbfv perp cdot mathbfa)+ mathbfa mathbfv parallel mathbfa
Le premier membre n'est qu'un composant mathbfv le long mathbfa , c'est-à-dire composant mathbfv perpendiculaire au plan. En d'autres termes, le premier terme est juste mathbfv perp .
mathbfa mathbfv mathbfa= mathbfv perp+ mathbfa mathbfv parallel mathbfa
Depuis mathbfa et mathbfv parallel (encore) perpendiculaire, leur produit géométrique est simplement leur produit externe, c'est-à-dire que vous pouvez les échanger et changer le signe.
\ 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}
- Et enfin, la dernière étape retourne le signe:
− mathbfa mathbfv mathbfa=− mathbfv perp+ mathbfv parallel
Autrement dit, nous voyons que le composant mathbfv perpendiculaire à l'avion, renversé, mais la partie parallèle reste la même!
RemarqueLa longueur mathbfa pas très important, donc ci-dessous, nous l'ignorons, mais si mathbfa n'est pas un vecteur unitaire, alors nous devons diviser par sa longueur et la formule se transforme en − mathbfa mathbfv mathbfa−1 , qui ressemble plus à un "produit en couches", auquel vous auriez dû vous habituer.
3.5. Deux réflexions se tournent: la situation en 2D
Il s'avère que si nous appliquons à
mathbfv deux réflexions consécutives (d'abord avec un vecteur
mathbfa puis avec le vecteur
mathbfb ), on obtient alors une
rotation à deux fois l'angle entre les vecteurs mathbfa et mathbfb .Nous pouvons montrer chaque étape ultérieure de réflexion dans le graphique ci-dessous:
Vous pouvez également modifier les vecteurs dans l'article d'origine.
mathbfa ,
mathbfb et
mathbfv , mais la configuration initiale des vecteurs sur le graphique (cliquez sur le bouton «Réinitialiser les positions des vecteurs») montre particulièrement clairement pourquoi la rotation en conséquence se produit sous un
double angle. Une autre bonne configuration est de définir
mathbfa et
mathbfb axes
mathbfx et
mathbfy .
3.6. Deux réflexions c'est un tour: la situation en 3D
Dans le cas du vecteur 3D
mathbfv peut être divisé en deux parties, dont l'une se trouve dans le plan donné
mathbfa et
mathbfb , et l'autre se situe en dehors du plan (perpendiculaire à celui-ci). Comme le montre le graphique ci-dessous, lorsque le vecteur est réfléchi par chacun des plans, sa partie extérieure reste la même. Quant à l'intérieur, on est de retour en 2D, et ça tourne juste deux fois l'angle!
3.7. Rotors
Du point de vue du produit géométrique, deux réflexions correspondent simplement à ce qui suit:
R mathbfb(R mathbfa( mathbfv))=− mathbfb(− mathbfa mathbfv mathbfa) mathbfb= mathbfb mathbfa mathbfv mathbfa mathbfb
Nous appelons
mathbfa mathbfb= mathbfa cdot mathbfb+ mathbfa wedge mathbfb rotor parce que la multiplication par
mathbfa mathbfb des deux côtés du vecteur, nous effectuons une rotation (
mathbfb mathbfa Est le même que
mathbfa mathbfb , uniquement dans le bivecteur partiel inversé).
Application du rotor
mathbfa mathbfb des deux côtés du vecteur tourne ce vecteur dans le plan des vecteurs
mathbfa et
mathbfb deux fois l'angle entre
mathbfa et
mathbfb .
Et c'est tout!Comparaison des rotors et quaternions 3D
Vous pouvez voir que les rotors 3D ressemblent beaucoup à des quaternions:
a+Bxy mathbfx wedge mathbfy+Bxz mathbfx wedge mathbfz+Byz mathbfy coin mathbfz
a+b mathbfi+c mathbfj+d mathbfk
En fait, le code / math est à peu près le même! La principale différence est que
mathbfi ,
mathbfj et
mathbfk remplacé par
mathbfy wedge mathbfz ,
mathbfx wedge mathbfz et
mathbfx wedge mathbfy mais ils fonctionnent essentiellement de la même manière. La comparaison de code peut être trouvée
ici . Je n'ai pas tout implémenté, par exemple log / exp pour l'interpolation, mais ils sont assez simples à créer.
Cependant, comme nous l'avons vu, les rotors 3D sont un concept en trois dimensions qui ne nécessite pas l'utilisation de «doubles tours en quatre dimensions» ou de «projection stéréographique» pour la visualisation. Essayer de visualiser des quaternions fonctionnant en 4D pour expliquer les rotations 3D, c'est un peu comme essayer de comprendre le mouvement planétaire d'un point de vue géocentrique. C'est-à-dire cette approche est trop compliquée parce que nous la considérons du mauvais point de vue.
Comme nous l'avons vu, la modélisation des rotations comme se produisant à l'intérieur des plans, plutôt qu'autour des vecteurs, nous aide beaucoup. Par exemple, les carrés des bivecteurs de base donnent
−1 , tout comme les quaternions de base (
mathbfi2= mathbfj2= mathbfk2=−1 ):
( mathbfx mathbfy)2=( mathbfx mathbfy)( mathbfx mathbfy)=−( mathbfy mathbfx)( mathbfx mathbfy)=− mathbfy( mathbfx mathbfx) mathbfy=− mathbfy mathbfy=−1
La multiplication de deux bivecteurs l'un par l'autre donne un troisième bivecteur, mais en fait c'est trivial, et nous n'avons pas besoin de nous rappeler que
mathbfi mathbfj= mathbfk :
( mathbfx mathbfy)( mathbfy mathbfz)= mathbfx( mathbfy mathbfy) mathbfz= mathbfx mathbfz
(Notez que nous avons utilisé
mathbfx wedge mathbfy= mathbfx mathbfy )
Ces propriétés sont le résultat d'un produit géométrique et ne naissent pas de nulle part!
Lecture complémentaire
(Au fait, en algèbre géométrique, il n'y a pas seulement des rotors, mais aussi d'autres choses sympas!)
- Algèbre linéaire et géométrique par Macdonald [ lien vers Amazon ]
Une excellente source, très claire et compréhensible, car il était sous-entendu qu'elle remplacerait le manuel d'algèbre linéaire pour les étudiants. - Algèbre géométrique pour l'informatique par Dorst et al. [ lien vers Amazon ]
Une excellente source, car la programmation permet parfois de mieux comprendre le sujet.Remarque: dans ce livre, les auteurs indiquent clairement que l'algèbre géométrique est plus lente que les quaternions (et similaires ...). En fait, il devrait avoir approximativement le même code (c'est-à-dire que vous ne devriez pas écrire de code pour l'algèbre géométrique, créant une structure généralisée qui peut contenir tous les types possibles de k-vecteurs, écrivez simplement, si nécessaire, une structure pour chaque type de k-vecteurs Autrement dit, pour remplacer les quaternions, vous pouvez écrire une structure Bivector et une structure Rotor, qui est Scalar + Bivector).