Cuaternionii și modul în care descriu rotațiile 3D

Povestea numerelor scrijelite pe un pod din Dublin și de ce fiecare dronă, robot și joc 3D se bazează azi pe ele. O introducere în cuaternioni, cu animații.

Cuaternionii și modul în care descriu rotațiile 3D

"Young man, in mathematics you don't understand things. You just get used to them." - John von Neumann

Dacă ai nevoie de cuaternioni pentru ceva anume și nu te interesează să aprofundezi, am un răspuns scurt: considerăm sistemul tridimensional de axe ortogonale cu versorii $\vec{i}, \vec{j}, \vec{k}$ și notăm centrul cu $1$; întrucât pentru un cuaternion unitar $|a| \le 1$, putem spune că $a = \cos(\theta)$ pentru un anumit $\theta$, $q = a + b\vec{i} + c\vec{j} + d\vec{k}$ poate fi scris ca
$$q = \cos(\theta) + \sin(\theta)(\frac{b}{\sin(\theta)}\vec{i} + \frac{c}{\sin(\theta)}\vec{j} + \frac{d}{\sin(\theta)}\vec{k})$$
iar cum magnitudinea lui $q$ este $1$, modulul vectorului 3d, $\vec{v} = \frac{b}{\sin(\theta)}\vec{i} + \frac{c}{\sin(\theta)}\vec{j} + \frac{d}{\sin(\theta)}\vec{k}$, va fi de asemenea $1$, deci putem spune că $$q = \cos(\theta) + \sin(\theta)\vec{v}$$ Acum amintește-ți Teorema de rotație a lui Euler, conform căreia orice schimbare de orientare a unui corp rigid în 3d este doar o singură rotație în jurul unei axe specifice, așa că, dacă vrei să găsești un cuaternion care să reprezinte rotația ta, poți alege $\vec{v}$ ca axă și $\theta$ ca jumătate din unghi. Inversul unui cuaternion unitar este $$q^{-1} = \cos(-\theta) + \sin(-\theta)\vec{v} = \cos(\theta) - \sin(\theta)\vec{v}$$ Pentru a obține coordonatele unui punct $p$ după rotația de $2\theta$, formula este $$p' = qpq^{-1}$$ Înmulțirea unităților imaginare este necomutativă și se face după următorul tabel


Răspuns lung: Povestea inventării cuaternionilor este foarte cunoscută în matematică, William R. Hamilton petrecând peste 10 ani încercând să găsească un sistem de numere tridimensional care să funcționeze în spațiu în mod analog cu felul în care se comportă numerele complexe în 2 dimensiuni. În fiecare dimineață, înainte de micul dejun, fiii săi îl întrebau dacă a reușit să înmulțească tripletele, iar el trebuia să răspundă cu tristețe „Nu, pot doar să le adun și să le scad", până când, într-o zi, în timp ce traversa podul Broom din Dublin în drum spre academie, i-a venit ideea că soluția era să adauge o a 4-a dimensiune, idee pe care a scrijelit-o pe una dintre pietre, care acum poartă o placă în onoarea sa.

Dar să începem cu ceva mai familiar, interpretarea geometrică a numerelor complexe: după cum îți amintești din liceu, le putem reprezenta pe $\mathbb{R}^2$, adică $a + ib$ corespunde punctului $X$ de coordonate $(a,b)$.

0:00
/0:40

În animație vei vedea că am considerat intersecția lui $OX$ cu cercul unitate, $X'$, și unghiul pe care această dreaptă îl formează cu axa reală, $\alpha$. Atunci coordonatele lui $X'$ sunt $(\cos(\alpha), \sin(\alpha))$, deci putem spune $X' ≡ \cos(\alpha) + i\sin(\alpha)$. Mai mult, întrucât $X$ se află pe aceeași dreaptă, $$X ≡ \|OX\|\big(\cos(\alpha) + i\sin(\alpha)\big)$$ aceasta este cunoscută drept forma trigonometrică a numerelor complexe și este foarte utilă dacă vrei să le înmulțești.

Înmulțirea în formă trigonometrică: Dacă $X = r_1(\cos\alpha + i\sin\alpha)$ și $P = r_2(\cos\beta + i\sin\beta)$ sunt numere complexe, unde $r_1 = \|OX\|$ și $r_2 = \|OP\|$, atunci $$XP = r_1 r_2\big(\cos(\alpha+\beta) + i\sin(\alpha+\beta)\big)$$ acest lucru se poate demonstra prin înmulțirea termenilor și folosind formulele de adunare pentru sinus și cosinus. În mod particular, pentru un număr complex de modul 1, de exemplu $X'$, $$P \cdot X' = r_2\big(\cos(\beta+\alpha) + i\sin(\beta+\alpha)\big)$$ este doar $P$ rotit în jurul lui $O$ cu $\alpha$ grade $= P'$, și așa descriu numerele complexe rotațiile: $\cos(\alpha) + i\sin(\alpha)$ corespunde unei rotații de $\alpha$ a lui $\mathbb{R}^2$.

Cuaternioni
Acum că înțelegi ce încercăm să obținem în 3 dimensiuni, hai să introducem cuaternionii. Un cuaternion este o expresie de forma $q = a + bi + cj + dk$, unde $a, b, c, d \in \mathbb{R}$ și $i, j, k$ sunt noile unități imaginare care satisfac regulile lui Hamilton: $$i^2 = j^2 = k^2 = ijk = -1$$ ar trebui de asemenea să notăm că pentru rotații folosim doar cuaternioni cu magnitudinea 1, adică $$\|q\| = \sqrt{a^2+b^2+c^2+d^2} = 1$$ Acum observă că, dacă îi considerăm vectori, ei formează o sferă generalizată în spațiul 4d, pe care o vom proiecta stereografic în $\mathbb{R}^3$. Ca să ne familiarizăm puțin, în imaginea de mai jos consideră că felia roșie este întreg spațiul 3d: pentru orice punct $P$ de pe hipersfera 4d, imaginea sa va fi punctul $P'$ în care dreapta care îl unește cu $-1$ intersectează $\mathbb{R}^3$. Așadar, de exemplu, cercul portocaliu din imagine ar fi în realitate sfera care trece prin $i, -i, j, -j, k, -k$. Axa numerelor reale $(1, -1)$ ne este invizibilă, dar este perpendiculară pe axele spațiului 3d. De aici putem construi ceva intuiție, de exemplu observă că toți cuaternionii cu partea reală $> 0$, adică $a > 0$, se proiectează în interiorul cercului, adică în interiorul sferei unitate din spațiul 3d (de exemplu, în imagine, punctul $P$), iar toate punctele cu partea reală negativă se proiectează în afara sferei (în imagine, punctul $T$).

0:00
/0:34

Mai mult, observă că $1$ se proiectează în centrul axelor și că $-1$ este trimis în punctul de la infinit. Acum, întrucât $a, b, c, d \in [-1, 1]$, îl putem scrie pe $a$ ca fiind $\cos(\theta)$ pentru un anumit $\theta$, atunci $$q = a + bi + cj + dk = \cos(\theta) + \sin(\theta)(\frac{b}{\sin(\theta)}\vec{i} + \frac{c}{\sin(\theta)}\vec{j} + \frac{d}{\sin(\theta)}\vec{k})$$ iar cum $\frac{b}{\sin(\theta)}\vec{i} + \frac{c}{\sin(\theta)}\vec{j} + \frac{d}{\sin(\theta)}\vec{k}$ este doar un vector 3d cu magnitudinea 1 (pentru că aveam $\|q\|=1$), forma trigonometrică a cuaternionilor este $$q = \cos(\theta) + \sin(\theta)\vec{v}, \quad \text{unde } \vec{v} = \frac{b}{\sin(\theta)}\vec{i} + \frac{c}{\sin(\theta)}\vec{j} + \frac{d}{\sin(\theta)}\vec{k}$$ (începe să semene cu numerele complexe :)).

Înmulțirea cuaternionilor
Înmulțirea cuaternionilor poate fi reprezentată ca fiind 2 rotații în spațiul 2d care se petrec sincron și cu același unghi; de exemplu, să considerăm înmulțirea cu cuaternionul $i$, pe care îl putem scrie și ca fiind $\cos(90°) + \sin(90°)\,\vec{i}$ și să vedem ce se întâmplă dacă înmulțim cu el toate celelalte unități. Ar trebui să încerci să vezi ce se întâmplă cu hipersfera și cum se traduce rotația în 3d.

Fig 2 este proiecția stereografică despre care am discutat: $1$ este centrul, iar $i, -i, j, -j, k, -k$ formează sfera unitate care rămâne neschimbată. Acum încearcă să te uiți la Fig 1.5 și să îți dai seama ce s-ar întâmpla dacă am roti hipersfera astfel încât $1$ să ajungă în $i$. Atunci, în imaginea proiectată (Fig 2), pe cercul $1, i, -1, -i$ (orice dreaptă este un cerc care trece prin punctul de la infinit; observă cum orice cerc care trece prin $-1$ va fi trimis într-o dreaptă prin proiecție) am avea $1 \to i$, $i \to -1$ (infinit), $-1 \to -i$ și $-i \to 1$, adică săgețile mov. Acest lucru este echivalent cu rotirea cercului $(1, i, -1, -i)$ cu 90 de grade. Acum, dacă ne uităm la cercul $j, k, -j, -k$, întrucât înmulțirea cu $i$ păstrează lungimile, ea este o rotație a spațiului 4d și trebuie să acționeze și asupra acestui cerc. Întrucât $i^2 = -1$, aplicarea de două ori a acestei operații este o jumătate de tură, care l-ar trimite pe $j$ în $-j$ și pe $k$ în $-k$, prin urmare o singură înmulțire este un sfert de tură, adică cercul se rotește cu 90 de grade, deci $j \to k$, $k \to -j$, $-j \to -k$, $-k \to j$, adică săgețile negre, și uite așa am dedus primul rând de formule din tabel: $ij = k$, $ik = -j$.

0:00
/0:37

Înmulțirea cu $i$ rotește simultan cu același unghi planele $(1, i)$ și $(j, k)$: după un sfert de tură $1 \to i$ și $j \to k$, după o jumătate fiecare punct ajunge în opusul lui ($i^2 = -1$), iar după o tură completă totul revine ($i^4 = 1$).Înmulțirea cu $i$ rotește simultan cu același unghi planele $(1, i)$ și $(j, k)$: după un sfert de tură $1 \to i$ și $j \to k$, după o jumătate fiecare punct ajunge în opusul lui ($i^2 = -1$), iar după o tură completă totul revine ($i^4 = 1$).DDa'D

În mod similar putem găsi celelalte rânduri considerând înmulțirea cu $j$ și cu $k$. Acum că știm ce se întâmplă cu unitățile atunci când sunt înmulțite între ele, putem defini înmulțirea oricăror 2 cuaternioni, întrucât termenii se distribuie. Așadar ne putem gândi la orice cuaternion unitar $q = \cos(\theta) + \sin(\theta)\mathbf{v}$ ca fiind o rotație de $\theta$ atât pe cercul normal al vectorului $\mathbf{v}$, cât și pe cercul definit ca trecând prin $1$, $-1$ și $q$ în 4d. Ideea pe care ar trebui să o reținem de aici este că înmulțirea cuaternionilor nu comută, $ij \neq ji$, de fapt am definit înmulțirea $pq$ considerându-l pe $p$ o funcție care acționează asupra întregului plan, iar pe $q$ doar un alt punct, dar te poți gândi și la $q$ ca fiind o funcție care acționează asupra lui $p$, caz în care cercul normal la partea vectorială a lui $q$ se va roti în sensul acelor de ceasornic. Acum, pentru rotațiile propriu-zise, vrem să folosim înmulțirea cuaternionilor pentru a descrie efectul unei singure rotații asupra unui punct.

Pentru a face asta, să definim pentru orice cuaternion unitar $q = \cos(\theta) + \sin(\theta)\vec{v}$ inversul său $$q^{-1} = \cos(\theta) - \sin(\theta)\vec{v} = \cos(\theta) + \sin(\theta)(-\vec{v})$$ Să considerăm de asemenea un punct $p$ în spațiu, adică un cuaternion cu partea reală 0, și produsul $$p' = qpq^{-1}$$ În desen avem $-\vec{v}$, $\vec{v}$ și cercul albastru din planul lor normal. Observați că, deoarece avem rotații de $\theta$ în ambele sensuri pe dreapta suport a lui $-\vec{v}$ și $\vec{v}$, săgețile roșii și portocalii de pe dreapta verde se anulează. Rămânem cu rotațiile pe cercul albastru: cum $q^{-1}$ acționează din dreapta, rotația pe care o creează va fi în sensul acelor de ceasornic față de $-\vec{v}$, adică exact la fel ca în sens invers acelor de ceasornic față de $\vec{v}$, care este rotația creată de $q$ acționând din stânga, ceea ce înseamnă că avem o rotație de $2\theta$ pe cercul albastru. Prin urmare, această înmulțire a făcut exact ce ne doream: a anulat rotația pe cercul care trece prin $-1$ și l-a lăsat pe $p'$ ca fiind doar $p$ rotit pe cercul albastru cu $2\theta$.

0:00
/0:17

$qp$ (roșu) și $pq^{-1}$ (portocaliu) ies din spațiul 3d în sensuri opuse, dar $qpq^{-1}$ (albastru) rămâne pe sferă și se rotește în jurul lui $\vec{v}$ cu $2\theta$: la $\theta = 180°$ el revine în $p$, în timp ce ceilalți doi abia ajung în $-p$.$qp$ (roșu) și $pq^{-1}$ (portocaliu) ies din spațiul 3d în sensuri opuse, dar $qpq^{-1}$ (albastru) rămâne pe sferă și se rotește în jurul lui $\vec{v}$ cu $2\theta$: la $\theta = 180°$ el revine în $p$, în timp ce ceilalți doi abia ajung în $-p$.

Până acum ar putea părea ciudat că am cu un sistem de numere atât de complicat, însă dacă vrei să afli de ce cuaternionii sunt cea mai bună modalitate de a descrie orientarea în grafica computerizată, îți recomand să urmărești prelegerea lui Freya Holmér despre modalitățile de a reprezenta rotațiile, precum și videoclipul 3Blue1Brown despre vizualizarea cuaternionilor, toate având linkuri atașate mai jos.

Resurse recomandate:
-> Why quaternions are useful (https://www.youtube.com/watch?v=PMvIWws8WEo).
-> 3Blue1Brown -Visualizing the 4d numbers quaternions (https://www.youtube.com/watch?v=d4EgbgTm0Bg&t=1589s).
-> Ben Eater’s interactive platform (https://eater.net/quaternions).
-> O alta introducere: https://lisyarus.github.io/blog/posts/introduction-to-quaternions.html


Multumiri:

Eduard Albu - autor
Mateo Perez - Universitatea Santiago de Compostela (reviewer)
Heroiu Rares Justinian - Alacrity Education (editor & animații)