Rotazione con asse arbitrario

Se l'asse di rotazione non è un asse coordinato, la rotazione può essere ottenuta trasformando l'asse di rotazione in uno degli assi coordinati, per esempio l'asse z , applicando poi la rotazione primaria attorno all'asse z , e infine componendo con la trasformazione che riporta l'asse z nell'asse di rotazione.

Si noti che per definire il verso della rotazione attorno all'asse, è necessario fissare un orientamento lungo l'asse di rotazione (esattamente come per gli assi coordinati). Questo può essere fatto scegliendo un vettore direzione per l'asse di rotazione.

Sia dunque r l'asse di rotazione, passante per un punto P[0] = (x[0], y[0], z[0]) e con direzione un vettore v = (v[1], v[2], v[3]) che possiamo supporre unitario: abs(v)^2 = v[1]^2+v[2]^2+v[3]^2 = 1. Il vettore v definisce un punto sulla sfera di raggio1 centrata nell'origine. Sulla sfera è possibile introdurre due coordinate sferiche , la longitudine theta e la colatitudine phi , che sono rispettivamente l'angolo tra l'asse x e la proiezione ortogonale di v sul piano xy e l'angolo tra l'asse z e il vettore v .

[Maple Plot]

La proiezione di v sul piano xy ha lunghezza sin(phi) e dunque v[1] = sin(phi)*cos(theta) e v[2] = sin(phi)*sin(theta) . Inoltre v[3] = cos(phi) .

La concatenazione

T(-x[0],-y[0],-z[0])*Rot[z](-theta)*Rot[y](-phi)

trasforma l'asse r di rotazione nell'asse z , poiché porta il punto P[0] nell'origine e il vettore direzione v nel vettore ( 0, 0, 1 ). Per ottenere la rotazione di un angolo alpha attorno alla retta orientata r basta concatenare le seguenti trasformazioni

T(-x[0],-y[0],-z[0])*Rot[z](-theta)*Rot[y](-phi)*Ro...

Esempio: sia r la retta passante per i punti P = (2, 1, 5) e Q = (4, 7, 2) , orientata secondo il vettore direzione Q-P = (2, 6, -3) . Il vettore Q-P ha lunghezza 7 e quindi v = (2/7, 6/7, -3/7) . Dunque cos(phi) = -3/7 e sin(phi) = 2*sqrt(10)/7 (la colatitudine è compresa tra 0 e Pi , con seno positivo) e cos(theta) = 2/(7*sin(phi)) , sin(theta) = 6/(7*sin(phi)) , cioè cos(theta) = 1/sqrt(10) , sin(theta) = 3/sqrt(10) .

matrice..

Osservazione: gli angoli theta e phi consentono di orientare facilmente un oggetto tridimensionale (si veda ad esempio la finestra dei grafici 3d in Maple, dove è possibile cambiare la direzione di vista modificando theta e phi ).