本文主要是介绍二维空间中的点绕原点的旋转矩阵是怎么来的?(内含视频讲解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如是我闻: 如果直接看书的话,他会告诉你二维空间中点的旋转变换的定义是这样的。
R ( β ) = [ cos ( β ) − sin ( β ) sin ( β ) cos ( β ) ] \mathbf{R}(\beta) = \begin{bmatrix} \cos(\beta) & -\sin(\beta) \\ \sin(\beta) & \cos(\beta) \end{bmatrix} R(β)=[cos(β)sin(β)−sin(β)cos(β)]
其中 β \beta β是按逆时针方向测量的旋转角度。
可是为什么是这样的呢?这矩阵是怎么来的呢?
二维空间中围绕原点的旋转矩阵是怎么来的
几何基础
在纸上可以画一下,在平面上有一点 P ( x , y ) P(x, y) P(x,y),你想将这个点围绕原点 O ( 0 , 0 ) O(0, 0) O(0,0)旋转某个角度 β \beta β。旋转是逆时针方向的。旋转后,点 P P P 的新位置称为 P ′ ( x ′ , y ′ ) P'(x', y') P′(x′,y′)。
从三角函数出发
考虑点 P P P 初始时与x轴的夹角为 α \alpha α,且 P P P 到原点的距离(即向量 O P OP OP的长度)是 r r r。根据三角函数,原始坐标 x x x 和 y y y 可以表示为:
- x = r cos ( α ) x = r \cos(\alpha) x=rcos(α)
- y = r sin ( α ) y = r \sin(\alpha) y=rsin(α)
当我们逆时针旋转这个点 β \beta β 度后,新的夹角是 α + β \alpha + \beta α+β。因此,旋转后的坐标 x ′ x' x′和 y ′ y' y′ 可以用新的角度来表示 (这里不明白可以去看直角坐标系与极坐标系的转换):
- x ′ = r cos ( α + β ) x' = r \cos(\alpha + \beta) x′=rcos(α+β)
- y ′ = r sin ( α + β ) y' = r \sin(\alpha + \beta) y′=rsin(α+β)
利用余弦和正弦的加法公式
我们可以应用余弦和正弦的加法公式来展开这两个表达式:
- cos ( α + β ) = cos ( α ) cos ( β ) − sin ( α ) sin ( β ) \cos(\alpha + \beta) = \cos(\alpha)\cos(\beta) - \sin(\alpha)\sin(\beta) cos(α+β)=cos(α)cos(β)−sin(α)sin(β)
- sin ( α + β ) = sin ( α ) cos ( β ) + cos ( α ) sin ( β ) \sin(\alpha + \beta) = \sin(\alpha)\cos(\beta) + \cos(\alpha)\sin(\beta) sin(α+β)=sin(α)cos(β)+cos(α)sin(β)
将这些代入 x ′ x' x′ 和 y ′ y' y′ 的表达式,我们得到:
- x ′ = r cos ( α ) cos ( β ) − r sin ( α ) sin ( β ) x' = r \cos(\alpha)\cos(\beta) - r \sin(\alpha)\sin(\beta) x′=rcos(α)cos(β)−rsin(α)sin(β)
- y ′ = r sin ( α ) cos ( β ) + r cos ( α ) sin ( β ) y' = r \sin(\alpha)\cos(\beta) + r \cos(\alpha)\sin(\beta) y′=rsin(α)cos(β)+rcos(α)sin(β)
既然 x = r cos ( α ) x = r \cos(\alpha) x=rcos(α) 和 y = r sin ( α ) y = r \sin(\alpha) y=rsin(α),我们可以简化上面的表达式为:
- x ′ = x cos ( β ) − y sin ( β ) x' = x \cos(\beta) - y \sin(\beta) x′=xcos(β)−ysin(β)
- y ′ = x sin ( β ) + y cos ( β ) y' = x \sin(\beta) + y \cos(\beta) y′=xsin(β)+ycos(β)
这个变换意味着每个点在平面上的新位置是通过将其旧位置从原点旋转 β \beta β度获得的。这种旋转保持了点与原点之间的距离不变(即 r r r是不变的),但是改变了点相对于原始x轴的角度。
向量和矩阵表示
当然有了以上的方程式,我们可以用向量和矩阵表示这个方程组,
给定一个点 P P P 的坐标为 ( x , y ) (x, y) (x,y),我们可以将其表示为列向量:
P = [ x y ] \mathbf{P} = \begin{bmatrix} x \\ y \end{bmatrix} P=[xy]
当这个点逆时针旋转角度 β \beta β 后,新的坐标 P ′ P' P′ 可以通过以下矩阵运算得到:
P ′ = R ( β ) P \mathbf{P'} = \mathbf{R}(\beta) \mathbf{P} P′=R(β)P
其中,旋转矩阵 R ( β ) \mathbf{R}(\beta) R(β)定义为:
R ( β ) = [ cos ( β ) − sin ( β ) sin ( β ) cos ( β ) ] \mathbf{R}(\beta) = \begin{bmatrix} \cos(\beta) & -\sin(\beta) \\ \sin(\beta) & \cos(\beta) \end{bmatrix} R(β)=[cos(β)sin(β)−sin(β)cos(β)]
计算示例
将旋转矩阵乘以点 P P P 的坐标向量,我们得到:
P ′ = [ cos ( β ) − sin ( β ) sin ( β ) cos ( β ) ] [ x y ] = [ x cos ( β ) − y sin ( β ) x sin ( β ) + y cos ( β ) ] \mathbf{P'} = \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} P′=[cos(β)sin(β)−sin(β)cos(β)][xy]=[xcos(β)−ysin(β)xsin(β)+ycos(β)]
这就是旋转后的坐标 P ′ P' P′,其中:
- 第一行给出了新的 x 坐标 x ′ = x cos ( β ) − y sin ( β ) x' = x \cos(\beta) - y \sin(\beta) x′=xcos(β)−ysin(β)
- 第二行给出了新的 y 坐标 y ′ = x sin ( β ) + y cos ( β ) y' = x \sin(\beta) + y \cos(\beta) y′=xsin(β)+ycos(β)
所以其实旋转矩阵就是从方程组的矩阵表示里得来的
非常的有品
以上
这篇关于二维空间中的点绕原点的旋转矩阵是怎么来的?(内含视频讲解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!