Rotazioni

v .  
        1.01 (3/10/2002)  © Amabile Tatone

Assegnata la matrice di una rotazione calcolare l'asse e l'ampiezza

Rotazione

mR=(({{-(4/(Sqrt[42])), (2/(Sqrt[14])), (1/(Sqrt[3]))}, {(5/(Sqrt[42])), (1/(Sqrt[14])), (1/(Sqrt[3]))}, {(1/(Sqrt[42])), (3/(Sqrt[14])), -(1/(Sqrt[3]))}}));

MatrixForm[mR]

Transpose[mR] . mR // Simplify

Det[mR]

n[v_] := (v/(Sqrt[v . v]))

mH = mR - IdentityMatrix[3] // Simplify

MatrixForm[mH // N]

Asse della rotazione

NullSpace[mH][[1]] // n // 
        N // Simplify

asse = N[%]

Calcolo dell'ampiezza della rotazione

Per calcolare l'ampiezza della rotazione occorre costruire una base ortonormale {a1, a2, a3}, con a3 parallelo all'asse, e calcolare la matrice della rotazione in tale base.

a3 = n[asse]

v = {-1, -2, 3}

a2 = v - (v . a3) a3  // n

a1 = Cross[a2, a3]

Det[{a1, a2, a3}]

(mR . a1) . a1 // N

(mR . a1) . a2 // N

(mR . a2) . a2 // N

ArcTan[(mR . a1) . a1, (mR . a1) . a2] // Simplify

ArcTan[(mR . a1) . a1, (mR . a1) . a2] (1/π) // 
      Simplify

ArcTan[(mR . a1) . a1, (mR . a1) . a2] (180/π) // 
      N

mA = Transpose[{a1, a2, a3}] // Simplify

Transpose[mA] . mR . mA  // Cancel // Factor // 
      MatrixForm

Proiezione sull'asse della rotazione

mP1 = Transpose[{a3}] . {a3};

MatrixForm[mP1]

Proiezione sul piano della rotazione

mP2 = Factor[IdentityMatrix[3] - mP1];

MatrixForm[mP2]

Simplify[mP2 . mP2 - mP2] // MatrixForm