《OGL dev》Etay Meiri Tutorial 07 - Rotation Transformation 笔记

假设z轴向屏幕内,从a1a_1旋转到a2a_2,绕z轴的旋转矩阵推导(不考虑旋转正方向):

x1=cos(a1)y1=sin(a1)x2=cos(a1+a2)y2=sin(a1+a2)x_1 = cos(a_1) \\ y_1 = sin(a_1) \\ x_2 = cos(a_1 + a_2) \\ y_2 = sin(a_1 + a_2)

和角公式:

cos(α+β)=cos αcos βsin αsin βsin(α+β)=sin αcos β+cos αsin βcos(α + β) = cos \ α \cdot cos \ β - sin \ α \cdot sin \ β \\ sin(α + β) = sin \ α \cdot cos \ β + cos \ α \cdot sin \ β

代入可得:

x2=cos(a1+a2)=cos a1cos a2sin a1sin a2=x1cos a2y1sin a2y2=sin(a1+a2)=sin a1cos a2+cos a1sin a2=y1cos a2+x1sin a2x_2 = cos(a_1 + a_2) = cos \ a_1 \cdot cos \ a_2 - sin \ a_1 \cdot sin \ a_2 = x_1 \cdot cos \ a_2 - y_1 \cdot sin \ a_2 \\ y_2 = sin(a_1 + a_2) = sin \ a_1 \cdot cos \ a_2 + cos \ a_1 \cdot sin \ a_2 = y_1 \cdot cos \ a_2 +x_1 \cdot sin \ a_2

逆推出z轴的旋转矩阵:

[cos asin a00sin acos a0000100001][xyz1]=[xcos aysin axsin a+ycos az1]\begin{bmatrix} cos \ a & - sin \ a & 0 & 0 \\ sin \ a & cos \ a & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x \cdot cos \ a - y \cdot sin \ a \\ x \cdot sin \ a + y \cdot cos \ a \\ z \\ 1 \end{bmatrix}

同理可推导绕y轴和x轴的旋转矩阵(不考虑旋转正方向):

[cos a0sin a00100sin a0cos a00001][xyz1]=[xcos azsin ayxsin a+zcos a1]\begin{bmatrix} cos \ a & 0 & - sin \ a & 0 \\ 0 & 1 & 0 & 0 \\ sin \ a & 0 & cos \ a & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x \cdot cos \ a - z \cdot sin \ a \\ y \\ x \cdot sin \ a + z \cdot cos \ a \\ 1 \end{bmatrix}

[10000cos asin a00sin acos a00001][xyz1]=[xycos azsin aysin a+zcos a1]\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos \ a & - sin \ a & 0 \\ 0 & sin \ a & cos \ a & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x \\ y \cdot cos \ a - z \cdot sin \ a \\ y \cdot sin \ a + z \cdot cos \ a \\ 1 \end{bmatrix}