旋转推导
默认绕原点旋转, 逆时针旋转。

需要用到的三角公式
- 和差化积
\[ \sinα + \sin\beta = 2\sin\frac{α + \beta}{2}\cos\frac{α - \beta}{2} \]
\[ \sinα - \sin\beta = 2\cos\frac{α + \beta}{2}\sin\frac{α - \beta}{2} \]
\[ \cosα + \cos\beta = 2\cos\frac{α + \beta}{2}\cos\frac{α - \beta}{2} \]
\[ \cosα - \cos\beta = 2\sin\frac{α + \beta}{2}\sin\frac{α - \beta}{2} \]
\[ \tanα \pm \tan\beta = \frac{\sin(α \pm\beta)}{\cosα. \cos\beta} \]
\[ \cotα \pm \cot\beta = `-` \pm \frac{\sin(α \pm \beta)}{\sinα. \sin\beta} \]
- 积化和差
\[ \sinα\cos\beta = \frac{1}{2}[\sin(α + \beta) + \sin(α - \beta)] \]
\[ \cosα\sin\beta = \frac{1}{2}[\sin(α + \beta) - \sin(α - \beta)] \]
\[ \cosα\cos\beta = \frac{1}{2}[\cos(α + \beta) + \cos(α - \beta)] \]
\[ \sinα\sin\beta = \frac{1}{2}[\cos(α + \beta) - \cos(α - \beta)] \]
旋转
2d 旋转推导
已知:
\[ 单位圆上点 A 坐标为(x, y), 与x轴夹角为 α, 点B 与点 A夹角为 \] \[。 求点B 坐标。 \]
推导:
\[ 设定 B 坐标为(x_{b}, y_{b}), 那么 x_{b} = \cos( α - \beta), \\ 由积化和差公式 3 4 得, \cos(α - \beta) = \cosα\cos\beta - \sinα\sin\beta \\ 所以 x_{b} = x\cos\beta - y\sin\beta \\ 同理 y_{b} = y\cos\beta + x\sin\beta \\ \]
公式写成矩阵的形式:
$$ \[\begin{bmatrix} \cos\beta & -\sin\beta \\ \sin\beta & \cos\beta \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix}\]=
\begin{bmatrix}
x\cos\beta & -y\sin\beta \\
x\sin\beta & y\cos\beta
\end{bmatrix}
$$
3d 旋转推导
同 2d 推导, 增加z 轴。 绕x 旋转时, 不影响x,绕y时,不影响y, 绕z时不影响z。 但是每个扰动都是依赖上个扰动的结果
此推导按照 z、y、x 先后顺序旋转。 \[ x_{rx} 代表绕 x 旋转的 x分量值。y_{rx} 绕x 旋转的 y分量值。 旋转角度分量为 \beta_{x}、\beta_{y}、\beta_{z} \\ 先绕z旋转。 \\ x_{rz} = x\cos\beta_{z} - y\sin\beta_{z} \\ y_{rz} = x\cos\beta_{z} + y\sin\beta_{z} \\ z_{rz} = z \\ 再绕y旋转 \\ x_{ry} = x_{rx}\cos\beta_{y} - y_{rx}\sin\beta_{y} \\ x_{ry} = y_{rx} \\ x_{ry} = x_{rx}\cos\beta_{y} + y_{rx}\sin\beta_{y} \\ 最后绕x旋转 \\ x_{rx} = x_{ry} \\ x_{rx} = y_{ry}\cos\beta_{x} - y_{ry}\sin\beta_{x} \\ x_{rx} = x_{ry}\cos\beta_{x} + y_{ry}\sin\beta_{x} \\ \]
公式写成矩阵的形式: 绕 z 旋转
$$ \[\begin{bmatrix} \cos\beta_{z} & -\sin\beta_{z} &0 \\ \sin\beta_{z} & \cos\beta_{z} &0 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x\\y \\z \end{bmatrix}\]=
\begin{bmatrix}
x\cos\beta_{z} - y\sin\beta_{z} \\
x\sin\beta_{z} + y\cos\beta_{z}
z \\
\end{bmatrix}
$$
绕 y 旋转
$$ \[\begin{bmatrix} \cos\beta_{y} &0 & \sin\beta_{y} \\ 0 & 1 & 0 \\ -\sin\beta_{y} &0 & \cos\beta_{y} \end{bmatrix} \begin{bmatrix} x\\y \\z \end{bmatrix}\]=
\begin{bmatrix}
x\cos\beta_{y} + z\sin\beta_{y} \\
y \\
-x\sin\beta_{y} + z\cos\beta_{y}
\end{bmatrix}
$$
绕x 旋转
$$ \[\begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\beta_{x} & -\sin\beta_{x} \\ 0 & \sin\beta_{x} & \cos\beta_{x} \end{bmatrix} \begin{bmatrix} x\\y \\z \end{bmatrix}\]=
\begin{bmatrix}
x \\
y\cos\beta_{x} - z\sin\beta_{x} \\
y\sin\beta_{x} + z\cos\beta_{x}
\end{bmatrix}
$$
按照 z、y、x 先后顺序旋转的矩阵。
$$ \[\begin{bmatrix} \cos\beta_{y}\cos\beta_{z} & -\cos\beta_{y}\sin\beta_{z} & \sin\beta_{y} \\ \cos\beta_{x}\sin\beta_{z} + \sin\beta_{x}\sin\beta_{y}\cos\beta_{z} & \cos\beta_{x}\cos\beta_{z} - \sin\beta_{x}\sin\beta_{y}\sin\beta_{z} & \sin\beta_{x}\cos\beta_{y} \\ \sin\beta_{x}\sin\beta_{z} - \cos\beta_{x}\sin\beta_{y}\cos\beta_{z} & \sin\beta_{x}\cos\beta_{z} + \cos\beta_{x}\sin\beta_{y}\sin\beta_{z} & \cos\beta_{x}\cos\beta_{y} \\ \end{bmatrix} \begin{bmatrix} x\\y \\z \end{bmatrix}\]=
\begin{bmatrix}
x\cos\beta - y\sin\beta \\
x\sin\beta + y\cos\beta
z \\
\end{bmatrix}
$$
平移
通过增广矩阵 增加一列构成 3x4 矩阵,拼凑成 4x4 矩阵, 则增加 一行 [0, 0, 0, w], 正交相机 w = 1.
缩放
单位矩阵对角线 作为缩放参数
Unity 矩阵
Matrix4x4.MultiplyPoint
运算矩阵,当运算方向而不是点的时候使用Matrix4x4.MultiplyVector..
需要跳过运算[0,0,0,1] 时使用
The Matrix4x4.MultiplyPoint4x3