黎小葱 2025-11-23 18:35 采纳率: 98.6%
浏览 2
已采纳

如何推导平移旋转后坐标公式?

在二维坐标系中,如何推导一个点绕原点旋转θ角并进行平移后的坐标变换公式?常见问题是:当点 $ P(x, y) $ 先绕原点逆时针旋转θ角得到新坐标,再平移 $ (t_x, t_y) $ 时,最终坐标的表达式应如何推导?尤其容易混淆的是变换顺序——若先平移再旋转,结果是否相同?许多初学者忽略齐次坐标与变换矩阵的结合使用,导致推导错误。请说明正确步骤,并解释为何变换顺序会影响最终结果。
  • 写回答

1条回答 默认 最新

  • 薄荷白开水 2025-11-23 18:53
    关注

    二维坐标系中点的旋转与平移变换:从基础到矩阵推导

    1. 基础概念:旋转与平移的数学表达

    在二维笛卡尔坐标系中,一个点 $ P(x, y) $ 的几何变换包括旋转和平移两种基本操作。

    • 绕原点逆时针旋转θ角:使用三角函数可得新坐标为:
    • $$ x' = x\cos\theta - y\sin\theta $$ $$ y' = x\sin\theta + y\cos\theta $$
    • 平移操作:将点沿 $x$ 和 $y$ 方向分别移动 $ t_x $、$ t_y $,即:
    • $$ x'' = x' + t_x $$ $$ y'' = y' + t_y $$

    若先旋转再平移,则最终坐标为:

    $$ \begin{cases} x_{\text{final}} = x\cos\theta - y\sin\theta + t_x \\ y_{\text{final}} = x\sin\theta + y\cos\theta + t_y \end{cases} $$

    2. 变换顺序的影响:先平移 vs 先旋转

    变换顺序对结果有显著影响。考虑以下两种情况:

    1. 先旋转后平移:旋转以原点为中心,平移是全局位移,不影响旋转中心。
    2. 先平移后旋转:此时点已不在原点附近,旋转仍围绕原点进行,导致轨迹偏移。
    变换顺序数学表达式
    先旋转后平移 $ x_f = x\cos\theta - y\sin\theta + t_x $
    $ y_f = x\sin\theta + y\cos\theta + t_y $
    先平移后旋转 $ x_f = (x + t_x)\cos\theta - (y + t_y)\sin\theta $
    $ y_f = (x + t_x)\sin\theta + (y + t_y)\cos\theta $

    显然两者不等价,说明仿射变换不可交换

    3. 齐次坐标与变换矩阵的引入

    为统一处理旋转与平移,引入齐次坐标(Homogeneous Coordinates):

    $$ P(x, y) \rightarrow \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} $$

    旋转和平移可分别表示为矩阵形式:

    旋转矩阵 R(θ):
    | cosθ  -sinθ  0 |
    | sinθ   cosθ  0 |
    |   0      0   1 |
    
    平移矩阵 T(tx, ty):
    | 1  0  tx |
    | 0  1  ty |
    | 0  0   1 |
    

    复合变换可通过矩阵乘法实现。

    4. 复合变换的矩阵推导

    先旋转后平移时,总变换矩阵为:

    $$ M_1 = T \cdot R(\theta) = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta & t_x \\ \sin\theta & \cos\theta & t_y \\ 0 & 0 & 1 \end{bmatrix} $$

    作用于点 $ [x, y, 1]^T $ 得到:

    $$ \begin{bmatrix} x_f \\ y_f \\ 1 \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta & t_x \\ \sin\theta & \cos\theta & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} $$

    展开后与前述公式一致。

    5. 若先平移后旋转的矩阵形式

    此时变换顺序为 $ R \cdot T $,即:

    $$ M_2 = R(\theta) \cdot T = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta & t_x\cos\theta - t_y\sin\theta \\ \sin\theta & \cos\theta & t_x\sin\theta + t_y\cos\theta \\ 0 & 0 & 1 \end{bmatrix} $$

    可见平移分量也被旋转了,这解释了为何结果不同。

    6. 流程图:二维仿射变换执行逻辑

    graph TD A[输入点 P(x, y)] --> B{选择变换顺序} B --> C[先旋转后平移] B --> D[先平移后旋转] C --> E[应用旋转矩阵 R(θ)] E --> F[应用平移矩阵 T] D --> G[应用平移矩阵 T] G --> H[应用旋转矩阵 R(θ)] F --> I[输出最终坐标] H --> I I --> J[可视化或进一步处理]

    7. 实际应用场景分析

    在计算机图形学、机器人路径规划、CAD系统中,此类变换极为常见。例如:

    • 机器人末端执行器的姿态调整:需先旋转工具方向,再定位到目标位置。
    • UI元素动画:图标旋转后再移动到屏幕某区域,必须保持顺序正确。
    • 图像配准:医学图像叠加时,若顺序错误会导致配准失败。

    忽略变换顺序可能导致系统级误差累积。

    8. 编程实现示例(Python)

    
    import numpy as np
    
    def rotate_then_translate(x, y, theta, tx, ty):
        cos_t, sin_t = np.cos(theta), np.sin(theta)
        x_rot = x * cos_t - y * sin_t
        y_rot = x * sin_t + y * cos_t
        return x_rot + tx, y_rot + ty
    
    def translate_then_rotate(x, y, theta, tx, ty):
        x_trans, y_trans = x + tx, y + ty
        cos_t, sin_t = np.cos(theta), np.sin(theta)
        return x_trans * cos_t - y_trans * sin_t, x_trans * sin_t + y_trans * cos_t
    
    # 示例调用
    P = (1, 0)
    result1 = rotate_then_translate(*P, np.pi/2, 2, 3)  # 先转90°再平移
    result2 = translate_then_rotate(*P, np.pi/2, 2, 3)  # 先平移再转90°
    print("先旋转后平移:", result1)  # 输出: (2.0, 4.0)
    print("先平移后旋转:", result2)  # 输出: (-3.0, 3.0)
    

    输出差异明显,验证理论推导。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 11月24日
  • 创建了问题 11月23日