- Les rotations 3D ont des points forts différents selon leur représentation : les matrices de rotation sont pratiques pour transformer des points, mais l’interpolation, la composition et la moyenne nécessitent d’autres outils
- Les angles d’Euler sont faciles à manipuler pour les humains, mais peuvent entraîner un gimbal lock, une vitesse angulaire non constante et des problèmes d’interpolation linéaire qui ne suit pas le plus court chemin
- Les quaternions unitaires offrent, avec le slerp, une interpolation à vitesse constante sur le plus court chemin, mais comme ils ne forment pas un espace vectoriel, l’édition directe, la multiplication par un scalaire et la moyenne sont peu intuitives
- Les applications exponentielle/logarithmique relient les vecteurs axis/angle et les matrices de rotation, ce qui permet de construire une interpolation 2D et 3D sur le plus court chemin sous la forme
R(t) = exp(t log(R1 R0^-1)) R0 - La moyenne de plusieurs rotations peut subir une catastrophic cancellation si l’on se contente d’une moyenne axis/angle naïve ; la moyenne de Karcher recherche itérativement la rotation qui minimise la somme des carrés des distances angulaires et produit un résultat plus cohérent
Avantages et inconvénients des différentes représentations de rotation
- Il existe plusieurs représentations des rotations 3D, et le bon choix dépend de l’objectif : transformation, édition, interpolation ou moyenne
-
Matrices de rotation
- La représentation la plus directe en algèbre linéaire est une matrice orthonormale 3x3 à déterminant positif
- Les trois colonnes d’une matrice de rotation indiquent où se retrouvent les axes x, y et z après la rotation
- La transformation des points se fait par multiplication matricielle, et la composition avec d’autres transformations linéaires aussi
- Si l’on utilise des matrices de rotation pour l’affichage, c’est parce qu’un seul produit matriciel suffit pour déplacer des points de l’espace monde vers l’écran
- Une matrice de rotation ne forme pas un espace vectoriel : additionner deux matrices de rotation ne donne pas forcément une autre matrice de rotation
- Une interpolation linéaire entre deux matrices de rotation peut mélanger rotation et scaling
-
Angles d’Euler
- Les angles d’Euler spécifient trois rotations autour des axes x, y et z, aussi appelées pitch, yaw et roll
- L’ordre d’application des trois rotations dépend de la convention ; l’exemple utilise l’ordre x, y, z
- Ils sont faciles à comprendre pour les humains et souvent utilisés pour éditer des rotations, mais une interpolation simple peut produire des résultats indésirables
- Le gimbal lock, où une rotation composante rend les deux autres axes de rotation parallèles, correspond à une singularité
- À la singularité, modifier l’un ou l’autre des deux angles verrouillés peut produire la même rotation de sortie
- Si le chemin d’interpolation atteint une singularité, le nombre de degrés de liberté pour représenter la position courante augmente, et choisir une représentation arbitraire pour continuer peut rendre l’interpolation de sortie discontinue
- Comme chaque angle composant est cyclique, une interpolation linéaire ne choisit pas toujours le plus court chemin entre deux rotations
- Si le chemin ne passe pas par une singularité, l’interpolation reste fluide, et l’on peut contourner ces limites tant qu’il n’est pas nécessaire de représenter « tout droit vers le haut » et « tout droit vers le bas »
-
Quaternions
- Les quaternions unitaires sont l’outil standard pour composer et interpoler des rotations
- La spherical linear interpolation, ou slerp, choisit le plus court chemin à vitesse constante entre deux quaternions
- Les quaternions unitaires ne forment pas non plus un espace vectoriel ; ils sont difficiles à éditer directement pour un humain, et leur interpolation peut avoir un coût de calcul
- Il manque aussi une notion intuitive de multiplication par un scalaire ou de moyenne
- Les quaternions réalisent un double-cover de l’espace des rotations, donc selon le cas
Q(1)peut aller vers-Q1
-
Axis/angle
- Une rotation axis/angle est représentée par un vecteur réel 3D
- La direction du vecteur indique l’axe de rotation, et sa norme l’angle de rotation autour de cet axe
- On l’écrit
θu, oùuest un vecteur unitaire etθl’angle de rotation - Comme il s’agit d’un vecteur 3D, cela forme un espace vectoriel, avec addition, changement d’échelle et interpolation possibles
- Une interpolation linéaire entre deux rotations axis/angle peut être fluide et donner une vitesse angulaire constante
- En revanche, selon la représentation axis/angle choisie pour la rotation cible, l’interpolation linéaire peut ne pas prendre le plus court chemin
- Comme les quaternions, les vecteurs axis/angle réalisent eux aussi un double-cover de l’espace des rotations
Application exponentielle et application logarithmique
- Si l’on peut passer d’une représentation de rotation à une autre selon le besoin, on peut combiner les avantages de chacune
- Comme la transformation finale requiert une matrice de rotation, on prend la matrice comme forme canonique
- L’application exponentielle est une fonction qui prend un objet de rotation et renvoie la matrice de rotation équivalente
- L’application logarithmique est la fonction correspondante qui prend une matrice de rotation et la reconvertit en objet de rotation
- Ici, on s’intéresse aux applications
expetlogentre matrices de rotation et vecteurs axis/angle
Intuition à partir du 2D axis/angle
- En 2D, il n’existe qu’un seul axe de rotation, perpendiculaire au plan ; une rotation axis/angle peut donc être représentée par un seul angle
θ - Si l’on note
pθle point 2Dptourné deθ, on peut écrirepθ = p cosθ + Jp sinθJest la matrice qui fait tourner un vecteur 2D de 90 degrés
Jvaut[[0, -1], [1, 0]], et commeJ² = -I, l’appliquer deux fois donne une rotation de 180 degrés- En développant cette expression, on obtient la matrice de rotation 2D standard
[[cosθ, -sinθ], [sinθ, cosθ]]
Applications exponentielle et logarithmique en 2D
- Dans la formule d’Euler pour les nombres complexes
e^(iθ) = cosθ + i sinθ,ijoue le rôle d’un quart de tour ; dans la formulation matricielle 2D,Jjoue ce même rôle - Si l’on injecte la matrice
A = θJdans la série de Taylor de la fonction exponentielle, on peut faire le même calcul à l’aide d’additions, de multiplications et de changements d’échelle matriciels - En développant, on retrouve les séries de Taylor de
sinθetcosθ, ce qui donnee^(θJ) = [[cosθ, -sinθ], [sinθ, cosθ]]
- L’application exponentielle 2D convertit donc un angle
θen la matrice de rotation correspondante - L’application logarithmique est définie comme l’inverse de l’application exponentielle
- Si
R = exp(θJ), alorslog(R) = θJ - On peut retrouver
θavecatan2(R21, R11)
- Si
- L’application exponentielle n’est pas injective
- Comme
exp(θJ) = exp((θ + 2π)J), ajouter un tour complet ne change pas la matrice de rotation obtenue - L’application logarithmique est donc définie pour renvoyer le plus petit angle correspondant à cette matrice de rotation
atan2implémente cette définition
- Comme
Interpolation basée sur exp/log
- On peut interpoler linéairement entre deux angles de rotation 2D
θ0,θ1, puis construire la matrice de rotation correspondante - Mais si
θ0etθ1sont séparés de plus deπ, cela ignore la nature cyclique des angles et emprunte le long chemin - Une interpolation basée sur exp/log calcule directement la rotation de déplacement à partir des deux matrices de rotation
R0,R1R1 R0^-1est la rotation qui annule d’abordR0, puis appliqueR1log(R1 R0^-1)donne le plus petit angle permettant d’aller deR0àR1- On met ensuite cette rotation axis/angle à l’échelle par
t, puis on la reconvertit en matrice avecexp
- La formule finale d’interpolation est
R(t) = exp(t log(R1 R0^-1)) R0R(0) = R0,R(1) = R1
- En 2D, on peut vérifier directement l’écart angulaire, mais cette méthode se généralise telle quelle à la 3D et aux dimensions arbitraires
Axis/angle 3D et matrice skew-symmetric
- En 3D aussi, on peut exponentier un axis/angle
θupour obtenir une matrice de rotation - L’idée clé consiste à trouver la transformation de quart de tour autour de l’axe unitaire
u - Le produit vectoriel
u × pest défini comme un vecteur perpendiculaire au plan formé paruetp, mais on peut aussi l’interpréter comme le quart de tour de la projectionp⊥depsur le plan perpendiculaire àu - On peut construire une matrice
ûqui produit le même résultat queu × pû = [[0, -uz, uy], [uz, 0, -ux], [-uy, ux, 0]]ûp = u × p
- Comme
ûᵀ = -û,ûest une matrice skew-symmetric - En 2D,
Jest aussi skew-symmetric et représente le produit vectoriel 2D ; la même structure se prolonge donc - La somme et la multiplication par un scalaire de matrices skew-symmetric restent skew-symmetric, donc la propriété d’espace vectoriel des rotations axis/angle se conserve aussi dans cette représentation matricielle
- L’identité
û^(k+2) = -û^kvient d’une interprétation géométrique : appliquer trois fois le produit vectoriel revient à faire tournerp⊥de trois quarts de tour, soit un quart de tour négatif
Application exponentielle 3D : formule de Rodrigues
- À partir d’une rotation axis/angle
θu, on formeθû, puis on l’exponentie pour obtenir une matrice de rotation 3D - En utilisant la série de Taylor et l’identité
û^(k+2) = -û^k, on obtiente^(θû) = I + sin(θ)û + (1 - cos(θ))û²
- Cette expression est connue sous le nom de formule de Rodrigues
- Si
θ = 0, alorse^(0û)p = p, donc le point reste inchangé - Si
θ = π/2, on obtientu × p + p∥, soit une rotation d’un quart de tour - Si
θ = π, on obtient-p⊥ + p∥, soit une rotation d’un demi-tour - Cette matrice est orthonormale
- La condition
AᵀA = Ise vérifie à l’aide deûᵀ = -ûetû^(k+2) = -û^k
- La condition
- Son déterminant vaut 1 pour
θ = 0, il n’y a aucun cas où le déterminant devient 0, et commeexpest continue par rapport àθetû, il ne peut pas devenir négatif - Donc
exp(θû)est bien une matrice de rotation 3D
Application logarithmique 3D
- L’application exponentielle 3D n’étant pas injective, l’application logarithmique 3D est définie pour renvoyer la rotation axis/angle de plus petite norme correspondant à une matrice donnée
- Dans
R = exp(θû) = I + sin(θ)û + (1 - cos(θ))û², on peut prendre la trace pour retrouver l’angle de rotation- La trace est la somme des termes diagonaux
tr(I) = 3- Comme
ûest skew-symmetric, sa trace vaut 0 tr(û²) = -2- Donc
tr(R) = 1 + 2cosθ θ = arccos((tr(R) - 1) / 2)
- L’axe de rotation se récupère en antisymétrisant
RR - Rᵀ = 2 sin(θ)ûû = (R - Rᵀ) / (2 sinθ)u = 1/(2 sinθ) [R32 - R23, R13 - R31, R21 - R12]ᵀ
- On obtient ainsi l’application logarithmique complète qui permet de revenir d’une matrice de rotation 3D vers un axis/angle
Résultat de l’interpolation en 3D
- En 3D, la même formule d’interpolation qu’en 2D s’applique telle quelle
R(t) = exp(t log(R1 R0^-1)) R0
- Cette interpolation conserve les avantages de la rotation axis/angle tout en choisissant toujours le plus court chemin
- Avec les angles d’Euler, le même exemple peut ne pas paraître fluide
Moyenne de plusieurs rotations
- Les quaternions permettent d’obtenir une bonne interpolation, donc on peut résoudre ce problème sans passer par les mathématiques matricielles exp/log
- Mais l’un des traitements plus simples en axis/angle est la moyenne de plusieurs matrices de rotation
- La méthode la plus simple consiste à convertir chaque matrice en axis/angle, à faire la moyenne des vecteurs, puis à reconvertir le résultat
- Cette méthode fonctionne, mais peut produire des comportements peu intuitifs
- En particulier, additionner des vecteurs axis/angle peut provoquer une catastrophic cancellation
- Un exemple est la moyenne de
[π, 0, 0]et[-π, 0, 0], qui donne 0 - Or ces deux valeurs représentent la même rotation, et le résultat moyen 0 ne représente correctement ni l’une ni l’autre
- Un exemple est la moyenne de
Moyenne de Karcher
- On peut voir la moyenne de points dans le plan comme le point qui minimise la somme des distances au carré vers tous les points
- La procédure itérative permettant de la trouver est la suivante
- Choisir une estimation initiale
x̄ ∈ R² - Calculer, pour chaque point, la translation
ui = xi - x̄allant de l’estimation à ce point - Calculer la moyenne vectorielle
u = (1/n) Σ ui - Déplacer l’estimation vers la direction moyenne avec
x̄ = x̄ + τu - Répéter tant que
|u| > ε
- Choisir une estimation initiale
- On peut appliquer la même idée à des rotations
R0, ..., Rn- Choisir une rotation d’estimation initiale
R̄ ∈ R^(3×3) - Pour chaque matrice, calculer l’axis/angle allant de l’estimation à cette rotation :
ui = log(Ri R̄^-1) - Calculer la moyenne vectorielle
u = (1/n) Σ ui - Déplacer
R̄dans la direction de rotation moyenne avecR̄ = exp(τu) R̄ - Répéter tant que
|u| > ε
- Choisir une rotation d’estimation initiale
- Le résultat de cet algorithme est la moyenne de Karcher
- La moyenne de Karcher est la rotation qui minimise la somme des carrés des distances angulaires vers toutes les autres rotations
- Elle ne subit pas de catastrophic cancellation et converge toujours vers une rotation intermédiaire non nulle
- Les résultats de la moyenne axis/angle simple et de la moyenne de Karcher se ressemblent souvent, mais la moyenne de Karcher a un comportement plus cohérent
Relation entre quaternions et exp/log
- Cette partie suppose une connaissance préalable des quaternions
- De la même façon que l’exponentiation des nombres complexes est équivalente à l’exponentiation des matrices 2D skew-symmetric, l’exponentiation des quaternions est équivalente à celle des matrices 3D skew-symmetric
- En 2D, on forme à partir de la rotation axis/angle
θle nombre complexe imaginaire puriθ, puis on l’exponentiee^(iθ) = cosθ + i sinθ- Le résultat est un nombre complexe qui, multiplié par un point, le fait tourner de
θ - Sa norme vaut toujours 1, donc une rotation 2D peut être représentée par un nombre complexe de norme unitaire
- En 3D, on peut former à partir du vecteur de rotation axis/angle
ule quaternion imaginaire purq = ux i + uy j + uz k - Les règles de multiplication des quaternions donnent
q² = -||q||² = -θ², ce qui ressemble à l’identité utilisée avec les matrices skew-symmetric - L’exponentiation donne alors
e^q = cosθ + (q/θ) sinθ- C’est presque la même formule qu’en 2D, sauf qu’il y a trois axes imaginaires au lieu d’un seul
- Une rotation axis/angle 3D se convertit ainsi en quaternion de norme unitaire
- Si l’on n’a pas besoin d’une matrice de rotation, l’application exponentielle sur les quaternions peut être un choix facile à calculer
- L’application logarithmique des quaternions est aussi simple
θ = arccos(Re(q))u = Im(q) / sinθ
- Pour faire tourner un point
pavec un quaternionq, on calcule la conjugaisonq p q^-1- On représente le point comme un quaternion imaginaire pur
p = px i + py j + pz k - Techniquement, cette conjugaison effectue une rotation de
2θautour de l’axeu, donc il faut au départ prendre|u| = θ/2
- On représente le point comme un quaternion imaginaire pur
Pour aller plus loin
- Pour apprendre les quaternions, on peut consulter quaternions de eater.net
- L’article de Marc ten Bosch explique pourquoi l’algèbre géométrique peut être plus intuitive
- Apprendre la structure algébrique des rotations 3D, SO(3), aide à mieux comprendre les relations entre axis/angle, quaternions et double-cover
- Il existe aussi une vidéo expliquant visuellement la relation entre SO(3), SU(2), quaternion et axis/angle
- La page Wikipedia de SO(3) traite d’axis/angle, de topologie, de SU(2), des quaternions et du lien avec l’algèbre de Lie
- L’espace vectoriel des matrices skew-symmetric forme so(3), l’algèbre de Lie associée à
SO(3)
1 commentaires
Avis de Hacker News
La correspondance groupe de Lie/algèbre de Lie est l’un des concepts les plus cool que j’aurais aimé apprendre à l’école. C’est l’application exponentielle et l’application logarithme dont parle l’article, mais sous une forme beaucoup plus réutilisable.
Si l’on prend un objet abstrait que l’on veut manipuler, comme les rotations 3D, sans se perdre dans les détails des coordonnées, c’est un groupe de Lie ; et si l’on en déduit une représentation en coordonnées qui se comporte bien, on obtient l’algèbre de Lie correspondante.
On obtient alors presque gratuitement les méthodes pour passer des coordonnées à l’objet abstrait et inversement, pour les composer, etc. ; et dans les cas fréquents en ingénierie, l’interpolation et les moyennes se traitent aussi de façon assez raisonnable.
Si l’on peut exprimer un problème comme une combinaison de groupes de Lie, il suffit de trouver quelles sont leurs algèbres pour s’épargner beaucoup de travail qui prendrait longtemps à faire à la main.
Ici, l’objet doit posséder une notion de variation lisse et un peu de structure supplémentaire, et les allers-retours peuvent soulever des problèmes de composantes connexes, mais c’est aussi pour cela qu’il est pratique de s’appuyer sur des résultats déjà connus.
Une longue semaine touche presque à sa fin, et faire tourner une vache avec des sliders était exactement la pause dont j’avais besoin.
Cela fait longtemps que je regrette que beaucoup de logiciels 3D n’utilisent pas une interface Arcball pour les rotations.
Les produits Autodesk, 3DSmax et Maya, l’utilisent, mais pas Blender ni OpenSCAD ; et quand je travaillais chez Roblox, je n’ai pas réussi à convaincre le PM, au motif que les utilisateurs se débrouillaient déjà avec l’approche existante.
Arcball est basé sur les quaternions et utilise l’exponentielle pour l’interpolation ; il permet n’importe quelle rotation en un seul glissement, n’a pas de blocage de cardan, et si l’on fait glisser en traçant une boucle fermée, on revient à la position de départ.
Cela se démontre mathématiquement à partir du fait que les quaternions unitaires forment un double revêtement de SO(3), un peu comme les nombres complexes unitaires représentent exactement les rotations sur le cercle.
Implémentation de référence manipulable pour quaternions/Arcball : https://romankogan.net/math/arcball_js/index.html
Le code est du Java abondamment commenté, avec la bibliothèque Processing exécutée en JavaScript via ProcessingJS.
Les mains et le corps peuvent comprendre les quaternions avant le cerveau ; donc si vous créez un logiciel 3D, j’aimerais que vous utilisiez cette approche.
Arcball : http://courses.cms.caltech.edu/cs171/assignments/hw3/hw3-not...
Quaternions pour les rotations : https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotati...
Arcball dans Processing : https://romankogan.net/math/arcball_js/index.html
Je le regarde actuellement sur mobile, et https://asliceofrendering.com/camera/2019/11/30/ArcballCamer... m’a aidé à comprendre Arcball.
Dans ce contexte, je ne comprends pas très bien pourquoi les gens aiment autant les quaternions. Il est difficile de dire que les matrices sont moins intuitives que les quaternions.
Les matrices agissent sur les vecteurs, et les rotations agissent elles aussi sur les vecteurs ; je ne vois donc pas ce qu’il y a de plus naturel que de voir les rotations comme des matrices.
L’exponentielle de matrice est également intuitive si on la relie aux équations différentielles ordinaires. La solution de
dx/dt = Axestexp(t A), et si A est antisymétrique, la variation de x est toujours orthogonale à x, ce qui donne une rotation qui ne change pas sa longueur.Les groupes de Lie/algèbres de Lie généralisent largement cela, mais l’idée centrale est de créer en continu une variation orthogonale pour générer une rotation, et que l’application exponentielle décrit ce processus. Cette image me semble beaucoup plus géométrique et intuitive.
À mon avis, l’avantage des quaternions est qu’ils sont plus faciles à manipuler avec papier et crayon que de calculer à la main les mêmes multiplications de matrices.
Personnellement, je les trouve intuitifs dans un sens proche des nombres complexes. Au début c’était étrange, mais aujourd’hui ils me semblent plus simples à utiliser et à raisonner que les alternatives que je connais.
Cette propriété est très importante dans les travaux graphiques, par exemple en animation ou pour calculer des frames le long de courbes spline 3D.
C’est similaire au traitement des rotations 2D avec des nombres complexes : si l’on multiplie deux nombres complexes, les rotations se composent, ce qui revient en 2D à additionner les arguments. De même, multiplier deux quaternions permet de composer des rotations 3D, et c’est bien plus efficace qu’une multiplication de matrices 3x3.
Pour l’intuition, les quaternions sont étroitement liés à la représentation axe-angle, qui est équivalente à l’algèbre de Lie so(3).
Du point de vue de l’action sur les vecteurs, on peut voir les différentes paramétrisations des rotations comme des implémentations d’un même trait abstrait
Rotation. Que l’implémentation interne soit une matrice, un quaternion, un vecteur d’Euler, des angles d’Euler ou un vecteur de Gibbs, une rotation agit sur les vecteurs et se compose de la même manière.Les quaternions unitaires forment un groupe de Lie, et si l’on veut quelque chose que l’on puisse additionner librement, il faut regarder l’algèbre de Lie de l’ensemble des quaternions, qui représente la vitesse de rotation. C’est équivalent à représenter une vitesse de rotation par axe-angle
Comparer les quaternions unitaires à l’axe-angle mélange légèrement les catégories ; il est plus approprié de comparer les quaternions unitaires aux matrices de rotation, et l’ensemble des quaternions à l’axe-angle
L’avantage des quaternions est qu’ils permettent de calculer facilement l’application exponentielle, mais quand on utilise des quaternions, on n’a presque pas besoin des matrices de rotation. Comme dans l’article, on peut calculer une rotation avec
pqp^-1À mon avis, le chemin le plus simple pour comprendre les quaternions est de lire de l’algèbre géométrique. Il a fallu des centaines d’années pour inventer les quaternions, mais une fois qu’on comprend l’algèbre géométrique, étonnamment simple, on peut les réinventer en quelques minutes
Un article que j’avais trouvé être une bonne introduction il y a quelques années : https://crypto.stanford.edu/~blynn/haskell/ga.html
Même en passant par les différentes formulations de l’algèbre géométrique, on finit par utiliser des rotors et des moteurs pour représenter les espaces SO(3)/SE(3), qui sont respectivement isomorphes aux quaternions et aux quaternions duaux
Mais pour cet objectif, les matrices de rotation 3x3 et les matrices de transformation 4x4, accompagnées de l’application exponentielle, restent à mon avis bien plus utiles. Les quaternions prennent moins de place et se multiplient rapidement entre eux, mais pour transformer des points, les matrices sont plus rapides, et l’efficacité globale dépend du contexte
Une des choses intéressantes que j’ai apprises à l’université, c’est qu’en redéfinissant l’opérateur
+pour l’adapter aux matrices et aux variations dans les espaces vectoriels, et l’opérateur-pour deux matrices, on peut mettre directement une matrice de rotation dans un état de filtre de KalmanCela permet d’estimer des rotations sans se soucier du blocage de cardan
https://openslam-org.github.io/MTK
+dans l’espace tangent est assez courant, pas seulement pour les filtres de Kalman mais aussi plus généralement en optimisation non linéaire. La bibliothèque Ceres prend aussi en chargeLocalParameterizationpour celaC’était vraiment excellent, et pas seulement quelques passages
J’ai particulièrement aimé le fait que ces méthodes finissent par calculer des matrices de rotation standard. Si l’on doit faire tourner un million de vecteurs, on ne fait le calcul intéressant qu’une seule fois, puis on laisse tourner un pipeline de multiplication matricielle hautement optimisé
C’était un super blog, puis j’ai cliqué sur le profil de l’auteur pour lire d’autres articles et je suis tombé sur la phrase « j’ai découvert la programmation vers 2010, quand j’avais 9 ans »
Moi, en 2010, j’avais 13 ans et j’essayais de faire rentrer dans ma tête les maths et les sciences du collège
Chaque fois que je lis un super article sur l’infographie écrit par quelqu’un qui semble plus jeune que moi et bien plus doué, je ressens un fort complexe d’infériorité
En revanche, je ne sais pas trop quels conseils donner sur la façon de faire. J’ai simplement continué parce que j’aimais vraiment ça. Cela dit, des choses comme la pratique structurée peuvent probablement fonctionner aussi
En cherchant une méthode pour calculer la moyenne de plusieurs rotations, je suis tombé sur https://mathweb.ucsd.edu/~sbuss/ResearchWeb/spheremean/paper...
La méthode de cet article me semble, du moins à mon niveau en maths, beaucoup plus simple que celle de ce papier
La moyenne est une opération que l’on peut faire avec une somme, et dans une somme l’ordre de composition n’a pas d’importance. Mais les rotations ne sont pas commutatives, donc la notion de moyenne telle qu’on la comprend habituellement ne s’applique pas directement
Tenez un téléphone, tournez l’écran de 180° pour qu’il pointe au loin, puis faites-le tourner de 90° dans le sens horaire par rapport au sol : la caméra pointera vers la gauche. Faites les mêmes deux rotations dans l’ordre inverse, et la caméra pointera vers la droite
Il n’y a pas de réponse unique à la question de savoir où la caméra devrait pointer dans la « moyenne » de ces deux rotations ; cela dépend des propriétés que l’on souhaite donner à cette moyenne
https://news.ycombinator.com/item?id=40333541
L’intuition centrale est que l’addition correspond à une translation, et la multiplication à une rotation. On peut donc utiliser la moyenne arithmétique pour la translation moyenne, et la moyenne géométrique pour la rotation moyenne
Il m’a fallu longtemps pour réaliser qu’en mathématiques aussi, on crée des abstractions, un peu comme lorsqu’on pense à l’abstraction en génie logiciel
Quand j’étais jeune, je ne comprenais pas pourquoi on inventait les nombres imaginaires, ni à quoi pouvaient bien servir les matrices
Ce n’est que plus tard que j’ai compris que ces représentations avaient été conçues. Si l’on crée quelque chose comme les nombres imaginaires, certains calculs deviennent plus faciles ; si l’on écrit des équations linéaires sous forme matricielle, il devient beaucoup plus simple de raisonner dessus que si l’on développe tout
Cela paraît évident, mais personne ne me l’avait présenté ainsi
Les espaces vectoriels, les anneaux, les espaces métriques et les catégories aussi ; les mathématiques sont pleines d’interfaces vues comme des design patterns
Cela dit, les interfaces en mathématiques ressemblent davantage aux type classes qu’à l’héritage en programmation. Car un même ensemble/type peut être un groupe de plusieurs manières différentes