In de 3-dimensionale ruimte wordt een rotatie rond de rechte (door de oorsprong) met genormeerde richtingsvector $$\vec{u}$$ over een hoek $$\theta$$ gegeven door de rotatiematrix:

$$\mathbf{R} = \cos{\theta} \mathbf{I_3} + \sin{\theta} [\mathbf{u}]_\times + (1 - \cos{\theta}) \mathbf{u} \cdot \mathbf{u}^T $$

Hierin stelt $$\mathbf{I_3}$$ de $$3 \times 3$$ eenheidsmatrix voor, en staat $$[\mathbf{u}]_\times$$ voor de matrix

$$ \left( \begin{array}{ccc} 0 & -u_z & u_y\\ u_z & 0 & -u_x\\ -u_y & u_x & 0\\ \end{array} \right) $$

Schrijf de functie rotatiematrix() met als argumenten een genormeerde kolomvector $$\mathbf{u}$$, voorgesteld door een 1D NumPy-rij, en de rotatiehoek $$\theta$$ (in radiaal). De functie geeft een NumPy-tabel (dus 2-dimensionale rij) terug, die de rotatiematrix rond deze rotatiehoek over een hoek $$\theta$$ voorstelt.

Argumenten

De kolomvector (als 1D NumPy-rij) die genormeerde richtingsvector van de rotatie-as voorstelt, gevolgd door de rotatiehoek (in radiaal)

Resultaat

Een $$3 \times 3$$ rotatiematrix als NumPy-tabel (dus een 2D rij).

Voorbeeld

u1 = np.array([0.,0.,1.])
t1 = math.pi/2.0
rotatiematrix(u1, t1) = 
[[  6.12323400e-17  -1.00000000e+00   0.00000000e+00]
 [  1.00000000e+00   6.12323400e-17   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   1.00000000e+00]]
w3 = math.sqrt(3)
u2 = np.array([1./w3,1./w3,1./w3])
t2 = math.pi/6.0
rotatiematrix(u2, t2) = 
[[ 0.9106836  -0.24401694  0.33333333]
 [ 0.33333333  0.9106836  -0.24401694]
 [-0.24401694  0.33333333  0.9106836 ]]