旋转推导

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

旋转推导 旋转推导

需要用到的三角公式

  • 和差化积

\[ \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 旋转推导

旋转推导1

已知:

\[ 单位圆上点 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


文章作者: Yonggang Long
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Yonggang Long !
 上一篇
2022-08-10 Yonggang Long
下一篇 
2022-08-10 Yonggang Long
  目录