1 points par GN⁺ 2024-06-16 | 1 commentaires | Partager sur WhatsApp
  • 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ù u est 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 exp et log entre 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 le point 2D p tourné de θ, on peut écrire
    • pθ = p cosθ + Jp sinθ
    • J est la matrice qui fait tourner un vecteur 2D de 90 degrés
  • J vaut [[0, -1], [1, 0]], et comme J² = -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θ, i joue le rôle d’un quart de tour ; dans la formulation matricielle 2D, J joue ce même rôle
  • Si l’on injecte la matrice A = θJ dans 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θ et cosθ, ce qui donne
    • e^(θ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), alors log(R) = θJ
    • On peut retrouver θ avec atan2(R21, R11)
  • 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
    • atan2 implémente cette définition

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 θ0 et θ1 sont 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, R1
    • R1 R0^-1 est la rotation qui annule d’abord R0, puis applique R1
    • log(R1 R0^-1) donne le plus petit angle permettant d’aller de R0 à R1
    • On met ensuite cette rotation axis/angle à l’échelle par t, puis on la reconvertit en matrice avec exp
  • La formule finale d’interpolation est
    • R(t) = exp(t log(R1 R0^-1)) R0
    • R(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 θu pour 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 × p est défini comme un vecteur perpendiculaire au plan formé par u et p, mais on peut aussi l’interpréter comme le quart de tour de la projection p⊥ de p sur le plan perpendiculaire à u
  • On peut construire une matrice û qui produit le même résultat que u × p
    • û = [[0, -uz, uy], [uz, 0, -ux], [-uy, ux, 0]]
    • ûp = u × p
  • Comme ûᵀ = -û, û est une matrice skew-symmetric
  • En 2D, J est 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) = -û^k vient d’une interprétation géométrique : appliquer trois fois le produit vectoriel revient à faire tourner p⊥ 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 obtient
    • e^(θû) = I + sin(θ)û + (1 - cos(θ))û²
  • Cette expression est connue sous le nom de formule de Rodrigues
  • Si θ = 0, alors e^(0û)p = p, donc le point reste inchangé
  • Si θ = π/2, on obtient u × 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 = I se vérifie à l’aide de ûᵀ = -û et û^(k+2) = -û^k
  • Son déterminant vaut 1 pour θ = 0, il n’y a aucun cas où le déterminant devient 0, et comme exp est 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 R
    • R - 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

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| > ε
  • 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 dans la direction de rotation moyenne avec R̄ = exp(τu) R̄
    • Répéter tant que |u| > ε
  • 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 pur , puis on l’exponentie
    • e^(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 u le quaternion imaginaire pur q = 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 p avec un quaternion q, on calcule la conjugaison q 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 autour de l’axe u, donc il faut au départ prendre |u| = θ/2

Pour aller plus loin

1 commentaires

 
GN⁺ 2024-06-16
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.

    • Mes yeux se sont voilés dès que j’ai vu tous ces chiffres, mais la vache était vraiment mignonne.
    • Ça ferait un parfait jeu iOS de cash cow à faible effort.
  • 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 me demande pourquoi le ressenti est tellement moins bon quand on fait glisser depuis un point sur la droite plutôt qu’au centre. On a l’impression que quelque chose accroche, et parfois ça saute ; si le point de référence servant à calculer la rotation change, il me semble que ce sens devrait être visible à l’écran.
    • Je me demande si l’on pourrait le faire fonctionner aussi sur mobile.
      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 = Ax est exp(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.

    • Les quaternions eux-mêmes sont souvent représentés par des matrices, comme les matrices de Pauli, ce qui est largement utilisé pour modéliser le spin quantique.
      À 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.
    • L’article expliquait aussi le gros avantage des quaternions par rapport aux matrices. Les quaternions s’interpolent bien, les matrices non.
      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.
    • Du point de vue du calcul, l’avantage des quaternions est qu’ils n’utilisent que 4 nombres au lieu des 9 d’une matrice 3x3, et que l’application d’une rotation réduit aussi le nombre d’opérations de façon comparable.
    • Le principal avantage des quaternions est la composition des rotations.
      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

    • Pour penser les rotations, je trouve que l’application exponentielle reste l’approche la plus robuste. Elle permet de traiter le groupe de Lie SO(3) de la manière la plus directe, y compris les changements de coordonnées, les dérivées et la gestion des espaces tangents
      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
    • Je me demande si par « ensemble des quaternions » il voulait dire quaternions purement imaginaires
  • 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 Kalman
    Cela permet d’estimer des rotations sans se soucier du blocage de cardan
    https://openslam-org.github.io/MTK

    • Je me demande si cela signifie que l’on prend l’espace tangent de SO(2) comme état
    • Implémenter l’opérateur + 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 charge LocalParameterization pour cela
  • C’é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é

    • Il n’est pas trop tard. Ces dernières années, j’ai appris en autodidacte une technologie de niche, et une grande entreprise semble vouloir payer pour l’utiliser. J’ai environ 35 ans
      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

    • Je me demande dans quel contexte on veut calculer la moyenne de plusieurs rotations
      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
    • Il y a quelques jours, j’ai écrit un commentaire un peu connexe sur les rotations dans le plan. Dans le plan, c’est beaucoup plus simple, surtout si l’environnement de programmation prend en charge les opérations sur les nombres complexes comme fonctionnalités de première classe
      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

    • Ce point de vue reste valable quand on étudie des mathématiques plus abstraites. Par exemple, un groupe est une interface, et « un groupe donné » peut être vu comme un type doté d’une opération qui implémente les trois propriétés/méthodes nécessaires
      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