Rotazioni spaziali con i quaternioni

Da Wikipedia, l'enciclopedia libera.

I quaternioni forniscono una notazione matematica conveniente per la rappresentazione di orientamenti e rotazioni di oggetti in tre dimensioni. In confronto agli angoli di Eulero presentano funzioni più semplici da comporre ed evitano il problema del gimbal lock. Confrontati con le matrici di rotazione essi sono più stabili numericamente e forse più efficienti. Quando vengono usati per rappresentare le rotazioni, i quaternioni vengono anche chiamati versori o quaternioni di rotazione, quando invece vengono usati per rappresentare le direzioni sono chiamati quaternioni di orientamento.

Utilizzare i quaternioni per le rotazioni[modifica | modifica sorgente]

Qualsiasi rotazione in tre dimensioni può essere rappresentata come una combinazione di un asse ed un angolo di rotazione. I quaternioni rappresentano un modo semplice per codificare questa rappresentazione asse-angolo in quattro numeri e applicare la rotazione corrispondente ad un vettore di posizione che rappresenta un punto relativamente all'origine in R3. I quaternioni precedono l'uso dei vettori in matematica, quindi alcune notazioni necessarie continuano ad essere utilizzate nel contesto di vettori. La notazione vettoriale i, j, k è un residuo di questo tempo, in cui un vettore come (2, 3, 4) o (a_x, a_y, a_z) può essere riscritta come 2i + 3j + 4k o a_xi + a_yj + a_zk. Usando questa notazione per la formula di Eulero, una rotazione in quaternioni può essere rappresentata utilizzando la formula:

 \mathbf{q} = e^{\tfrac{1}{2}{\theta(a_xi + a_yj + a_zk)}} = \cos \tfrac{1}{2}\theta + (a_xi + a_yj + a_zk) \sin \tfrac{1}{2}\theta

dove \theta è l'angolo di rotazione ed il vettore (a_x, a_y, a_z) è un versore che rappresenta l'asse di rotazione. il fattore 1/2 consente di rappresentare le rotazioni in senso sia orario che antiorario. Per applicare le rotazioni ad un punto \mathbf{p} rappresentato dal vettore posizione \mathbf{p} = (p_x, p_y, p_z), si valuta il prodotto di Hamilton:

p_x'i + p_y'j + p_z'k = \mathbf{q} (p_xi + p_yj + p_zk) \mathbf{q}^*

dove (p_x', p_y', p_z') è il nuovo vettore posizione del punto dopo la rotazione, e \mathbf{q}^* è il coniugato di \mathbf{q}:

 \mathbf{q}^* = e^{-\tfrac{1}{2}{\theta(a_xi + a_yj + a_zk)}} = \cos \tfrac{1}{2}\theta - (a_xi + a_yj + a_zk) \sin \tfrac{1}{2}\theta

Due quaternioni rappresentanti due rotazioni possono essere combinati in un quaternione equivalente con la relazione:

\mathbf{q}' = \mathbf{q}_2 \mathbf{q}_1

dove \mathbf{q}' corrisponde alla rotazione \mathbf{q}_1 seguita dalla rotazione \mathbf{q}_2 (si noti che la moltiplicazione tra quaternioni non è commutativo). Pertanto, un numero arbitrario di rotazioni può essere composto ricorsivamente e quindi applicato come una singola rotazione.

Una rotazione con quaternioni può essere manipolata algebricamente in una matrice di rotazione. Semplificando le moltiplicazioni fra quaternioni \mathbf{q} \mathbf{p} \mathbf{q}^*, esse possono essere riscritte come una matrice di rotazione in una rappresentazione asse-angolo di rotazione:

 \begin{bmatrix}
c(\theta) + a_x^2 \left(1-c(\theta)\right) &
a_x a_y \left(1-c(\theta)\right) - a_z s(\theta) &
a_x a_z \left(1-c(\theta)\right) + a_y s(\theta) \\
a_y a_x \left(1-c(\theta)\right) + a_z s(\theta) &
c(\theta) + a_y^2 \left(1-c(\theta)\right) &
a_y a_z \left(1-c(\theta)\right) - a_x s(\theta) \\
a_z a_x \left(1-c(\theta)\right) - a_y s(\theta) &
a_z a_y \left(1-c(\theta)\right) + a_x s(\theta) &
c(\theta) + a_z^2 \left(1-c(\theta)\right)
\end{bmatrix}

dove s(\theta) e c(\theta) sono abbreviazioni per \sin(\theta) and \cos(\theta) rispettivamente. Nonostante si debba prestare attenzione alla degenerazione (quando il quaternione diventa il quaternione identità o il seno dell'angolo diventa zero), l'asse e l'angolo possono essere ricavati nel modo seguente:

 \begin{align}
\mathbf{q} & = q_r + q_i i + q_j j + q_k k \\
\theta &= 2 \cos^{-1} q_r = 2 \sin^{-1} \sqrt{q_i^2 + q_j^2 + q_k^2} \\
(a_x, a_y, a_z) &= \frac{1}{\sin \tfrac{1}{2} \theta} (q_i, q_j, q_k)
\end{align}

Si noti che l'uguaglianza per \theta è vera solo quando la radice quadrata della somma dei quadrati dei termini immaginari ha lo stesso segno di q_r.

Come altri schemi per rappresentare rotazioni, il centro di rotazione deve essere traslato nell'origine prima di applicare la rotazione e poi traslato di nuovo nella sua posizione originale.

Operazioni di rotazione con i quaternioni[modifica | modifica sorgente]

Una formale spiegazione delle proprietà usate in questa sezione è data da Altmann.[1]

L'ipersfera delle rotazioni[modifica | modifica sorgente]

Visualizzare lo spazio delle rotazioni[modifica | modifica sorgente]

I quaternioni unitari rappresentano lo spazio matematico delle rotazioni in tre dimensioni in modo molto chiaro e semplice. La corrispondenza tra rotazioni e quaternioni può essere compresa visualizzando lo spazio delle rotazioni stesso.

Qualsiasi rotazione in tre dimensioni può essere descritta da una rotazione di un certo angolo su alcuni assi. Consideriamo il caso particolare in cui l'asse di rotazione giace nel piano xy. Possiamo quindi specificare l'asse di una di queste rotazioni da un punto su un cerchio, e possiamo usare il raggio del cerchio per specificare l'angolo di rotazione. Allo stesso modo, una rotazione il cui asse di rotazione si trovi nel piano "xy" può essere descritta come un punto su una sfera di raggio fissato in tre dimensioni. Iniziando dal polo nord di una sfera nello spazio tridimensionale, si può definire in esso la rotazione identità (con angolo di rotazione zero). In questo caso nessun asse di rotazione è definito, e l'angolo di rotazione (zero) è irrilevante. Una rotazione con un angolo di rotazione molto piccolo può essere specificato da una sezione piana della sfera parallela al piano xy e molto vicino al polo nord. Il cerchio definito da questa fetta sarà molto piccolo, corrispondente al piccolo angolo di rotazione. Come gli angoli di rotazione diventano più grandi, la sezione si muove nella direzione negativa "z", e i cerchi diventano più grandi fino a quando l'equatore della sfera è raggiunto, che corrisponde a un angolo di rotazione di 180 gradi. Proseguendo verso sud, i raggi dei cerchi diventano più piccoli (corrispondente al valore assoluto dell'angolo di rotazione considerato come un numero negativo). Non appena il Polo Sud è raggiunto, i cerchi tendono ancora una volta alla rotazione identità.

Si noti che un certo numero di caratteristiche di tali rotazioni e le loro rappresentazioni viene mantenuto da questa visualizzazione. Lo spazio delle rotazioni è continuo, ogni rotazione ha un intorno di rotazioni che sono quasi le stesse, e questo intorno diventa piatto come l'insieme si restringe. Inoltre, ogni rotazione è in realtà rappresentata da due punti antipodali sulla sfera, che sono agli estremi opposti di una linea attraverso il centro della sfera. Questo riflette il fatto che ogni rotazione può essere rappresentata come una rotazione su alcuni assi, o, equivalentemente, come una rotazione negativa su un asse che punta nella direzione opposta (una cover cosiddetto doppio). La "latitudine" di un cerchio che rappresenta un particolare angolo di rotazione sarà metà dell'angolo di rotazione, dato che il punto viene spostato dal nord al polo sud, la latitudine varia da zero a 180 gradi, mentre l'angolo di rotazione va da 0 a 360 gradi. (La "longitudine" di un punto rappresenta quindi un determinato asse di rotazione.) Si noti tuttavia che questa serie di rotazioni non è chiuso rispetto all'operazione di composizione. Due rotazioni successive con gli assi del piano xy non corrisponderanno necessariamente a una rotazione il cui asse giace nel piano xy, e quindi non può essere rappresentato come un punto sulla sfera. Questo non sarà il caso con una rotazione generale in 3-spazio, che formano un insieme chiuso sotto composizione.

Due rotazioni di angoli diversi su assi differenti nello spazio delle rotazioni. La lunghezza del vettore rappresenta la magnitudo della rotazione.
Ipersfera di rotazione per rotazioni aventi l'asse orizzontale (nel piano xy).Per ogni punto dell'asse verticale 0°-360° si ha un asse del piano orizzontale xy.

Questa visualizzazione può essere estesa a una rotazione generale in uno spazio tridimensionale, aggiungendo una dimensione al caso visto sopra (le circonferenze diventano sfere): la rotazione identità rimane un punto, un piccolo angolo di rotazione stavolta non corrisponde a un punto su una circonferenza molto piccola ma un punto su una sfera molto piccola. All'aumentare dell'angolo di rotazione la sfera cresce, fino a quando l'angolo di rotazione raggiunge i 180 gradi, a questo punto la sfera comincia a restringersi, diventando un punto non appena l'angolo si avvicina a 360 gradi (o zero gradi rispetto alla direzione negativa). Questo set di espansione e contrazione di sfere rappresenta una ipersfera in uno spazio a quattro dimensioni (anche detta 3-sfera). Proprio come l'esempio più semplice di cui sopra, ogni rotazione rappresentata come un punto sulla ipersfera è compensata dal suo punto antipodale su tale ipersfera. La "latitudine" sulla ipersfera sarà la metà del corrispondente angolo di rotazione, e l'intorno di qualsiasi punto diventa più "piatto" (vale a dire che può essere rappresentato da uno spazio euclideo 3-D di punti). Questo comportamento si sposa con l'insieme dei quaternioni unità: un quaternione generale rappresenta un punto in uno spazio a quattro dimensioni, ma a condizione di avere magnitudo unitaria nello spazio a tre dimensioni equivalente alla superficie di una ipersfera. La grandezza del quaternione unità sarà l'unità, corrispondente ad una ipersfera di raggio unitario. La parte vettoriale di un quaternione unità rappresenta il raggio della sfera-2 corrispondente all'asse di rotazione, e la sua magnitudine è il seno di metà dell'angolo di rotazione. Ogni rotazione è rappresentata da due quaternioni unità di segno opposto, e, come nello spazio di rotazioni in tre dimensioni, il prodotto di due quaternioni unità produrrà un quaternione unità. Inoltre, lo spazio dei quaternioni unità è "piatto" in ogni intorno infinitesimale di un quaternione data unità.

Parametrizzazione dello spazio delle rotazioni[modifica | modifica sorgente]

La superficie di una sfera può essere parametrizzata con due coordinate,come ad es.latitudine e longitudine. Purtroppo una parametrizzazione che usa latitudine e longitudine presenta una degenerazione ai poli, ovvero ai poli la longitudine perde di significato; una rappresentazione di questo tipo non è ottimale in quanto i poli vengono trattati come punti speciali il che non è corretto in quanto non sono intrinsecamente differenti da tutti gli altri punti della sfera. Si può dimostrare che nessuna parametrizzazione che usi due sole coordinate può evitare tale degenerazione. Per aggirare il problema si deve considerare la superficie della sfera immersa in uno spazio tridimensionale e parametrizzarla usando tre coordinate cartesiane ( w,x,y), ponendo il polo nord a (w,x,y) = (1,0,0) , il polo sud a (w,x,y) = (-1,0,0) e l'equatore a w=0 , x2 + y2 = 1. I punti sulla sfera soddisfano il vincolo w2 + x2 + y2 = 1, in modo da mantenere comunque due gradi di libertà tra le coordinate. Un punto (w,x,y) sulla sfera rappresenta una rotazione nello spazio ordinario attorno all'asse orizzontale diretto dal vettore (x,y,0) di un angolo \alpha= 2 \cos^{-1} w = 2 \sin^{-1} \sqrt{x^2+y^2}.

Allo stesso modo l'ipersfera spazio delle rotazioni 3D può essere parametrizzata da tre angoli (es. Angoli di Eulero), ma anche in questo caso si hanno delle degenerazioni in determinati punti, ( si veda il problema del gimbal lock). Anche qui si può aggirare il problema usando quattro coordinate w,x,y,z, con w2 + x2 + y2 + z2 = 1. Il punto (w,x,y,z) rappresenta una rotazione attorno all'asse diretto come il vettore (x,y,z) di angolo \alpha = 2 \cos^{-1} w = 2 \sin^{-1} \sqrt{x^2+y^2+z^2}.

Dalle rotazioni ai quaternioni[modifica | modifica sorgente]

Cenni sui quaternioni[modifica | modifica sorgente]

Exquisite-kfind.png Per approfondire, vedi Quaternioni.

I numeri complessi possono essere definiti introducendo il simbolo astratto i che soddisfi le usuali regole dell'algebra e inoltre soddisfi la regola i2 = −1. Questo è sufficiente a riprodurre tutte le regole dell'aritmetica dei numeri complessi, ad esempio:

(a+b\mathbf{i})(c+d\mathbf{i}) = ac + ad\mathbf{i} + b\mathbf{i}c + b\mathbf{i}d\mathbf{i} = ac + ad\mathbf{i} + bc\mathbf{i} + bd\mathbf{i}^2 = (ac - bd) + (bc + ad) \mathbf{i}.

Allo stesso modo i quaternioni possono essere definiti introducendo i simboli astratti i, j, k che soddisfino le regole i2 = j2 = k2 = ijk = −1 più le usuali regole algebriche ad eccezione della proprietà commutativa del prodotto (un tipico esempio di moltiplicazione non commutativa è la moltiplicazione di matrici). Da questo segue che si può mostrare:

(a + b\mathbf{i} + c\mathbf{j} + d\mathbf{k}) (e + f\mathbf{i} + g\mathbf{j} + h\mathbf{k}) = (ae - bf - cg - dh) + (af + be + ch - dg) \mathbf{i} + (ag - bh + ce + df) \mathbf{j} + (ah + bg - cf + de) \mathbf{k}.

La parte immaginaria b\mathbf{i} + c\mathbf{j} + d\mathbf{k} del quaternione si può associare a un vettore \vec{v} = (b,c,d) nello spazio tridimensionale e la parte a si associa a uno scalare \mathbb{R}. Quando i quaternioni sono usati in geometria è più conveniente definirli come somma scalare+vettore:

a + b\mathbf{i} + c\mathbf{j} + d\mathbf{k} = a + \vec{v}.

La somma scalare+vettore può essere vista come la somma di due quaternioni, uno con la parte vettoriale pari a 0 e una con quella scalare pari a 0.

a + \vec{v} = (a + \vec{0}) + (0 + \vec{v}).

Per i quaternioni si può esprimere il prodotto ricorrendo al prodotto vettoriale e quello scalare degli usuali vettori. In virtù delle regole i2 = j2 = k2 = ijk = −1 si ha:

\vec{v} \vec{w} = \vec{v} \times \vec{w} - \vec{v} \cdot \vec{w},

dove:

  • \vec{v} \vec{w} è il quaternione risultante,
  • \vec{v} \times \vec{w} è il vettore risultato del prodotto vettoriale,
  • \vec{v} \cdot \vec{w} è lo scalare risultato del prodotto scalare.

Nei quaternioni il prodotto non è commutativo, a causa del prodotto vettoriale. Da queste regole segue che (see details):

(s + \vec{v}) (t + \vec{w}) = (s t - \vec{v} \cdot \vec{w}) + (s \vec{w} + t \vec{v} + \vec{v} \times \vec{w}).

Note[modifica | modifica sorgente]

  1. ^ Rotations, Quaternions, and Double Groups. Altmann, Simon L., Dover Publications, 1986 (vedi capitolo 12).

Collegamenti esterni[modifica | modifica sorgente]