逆时针旋转坐标推导公式

下面的文章是DeepSeek回答我问题的AI博文,有此类需求的可以参考一下。

二维坐标系中点的旋转变换是计算机图形学、机器人学、游戏开发等领域的基础操作。通过逆时针旋转β角(通常以弧度为单位)来推导点的新坐标,可以从几何、线性代数以及复数等多个角度进行。

1. 几何与三角函数推导

这是最直观的推导方法。假设原坐标系中点 P 的坐标为 (x, y),它到原点的距离为 r,与 x 轴正方向的夹角为 α。则其坐标可表示为:
x = r * cos(α), y = r * sin(α)

当点 P 绕原点逆时针旋转角度 β 后,新点 P' 的坐标 (x', y') 满足:
x' = r * cos(α + β), y' = r * sin(α + β)

利用三角函数的和角公式:
cos(α + β) = cos(α)cos(β) - sin(α)sin(β)
sin(α + β) = sin(α)cos(β) + cos(α)sin(β)

x = r * cos(α)y = r * sin(α) 代入,即可得到旋转后的坐标公式:
x' = x * cos(β) - y * sin(β)
y' = x * sin(β) + y * cos(β)

此即二维坐标系中点绕原点逆时针旋转的变换公式 。

2. 矩阵表示法(线性代数视角)

上述公式可以方便地用矩阵乘法表示,这更便于在计算机中进行批量计算和与其他变换(如平移、缩放)组合。旋转变换矩阵 R(β) 如下:

R(β) = [[cos(β), -sin(β)], [sin(β), cos(β)]]

P 的坐标可以表示为列向量 [x, y]^T。旋转后的坐标 P' 通过矩阵乘法得到:
[x', y']^T = R(β) * [x, y]^T

展开后即为:
x' = cos(β) * x - sin(β) * y
y' = sin(β) * x + cos(β) * y

这与几何推导的结果完全一致 。矩阵表示法的优势在于,多个连续变换可以通过矩阵连乘来实现。

3. 复数平面理论推导

在复平面上,点 (x, y) 可以表示为复数 z = x + iy,其中 i 是虚数单位。

绕原点逆时针旋转角度 β 的变换,等价于将复数 z 乘以一个模为1、辐角为 β 的复数 e^(iβ)(根据欧拉公式 e^(iβ) = cos(β) + i sin(β))。

计算过程如下:
z' = z * e^(iβ) = (x + iy) * (cos(β) + i sin(β))

展开计算:
z' = (x * cos(β) - y * sin(β)) + i (x * sin(β) + y * cos(β))

复数 z' 的实部和虚部就分别对应了新点的 x'y' 坐标:
x' = x * cos(β) - y * sin(β)
y' = x * sin(β) + y * cos(β)

此方法从复分析的角度优雅地得出了相同的结论 。

4. 应用示例与代码实现

以下是一个 Python 代码示例,演示了如何使用上述公式计算点 (1, 0) 绕原点逆时针旋转 90 度(π/2 弧度)后的坐标:

python 复制代码
import numpy as np

def rotate_point_origin(x, y, beta_rad):
    """
    计算点(x, y)绕原点逆时针旋转beta_rad弧度后的新坐标。
    参数:
        x, y: 原始坐标。
        beta_rad: 旋转弧度(逆时针为正)。
    返回:
        (x_new, y_new): 旋转后的坐标。
    """
    # 使用旋转矩阵公式进行计算 
    cos_b = np.cos(beta_rad)
    sin_b = np.sin(beta_rad)
    
    x_new = x * cos_b - y * sin_b
    y_new = x * sin_b + y * cos_b
    
    return x_new, y_new

# 示例:将点(1, 0)逆时针旋转90度
original_point = (1.0, 0.0)
rotation_angle = np.pi / 2  # 90度转换为弧度

new_point = rotate_point_origin(*original_point, rotation_angle)
print(f"原始坐标: {original_point}")
print(f"旋转角度: {np.degrees(rotation_angle):.0f} 度")
print(f"旋转后坐标: {new_point}")
# 预期输出: (0.0, 1.0)

5. 绕任意点旋转的通用公式

上述推导均假设旋转中心是坐标系原点。在实际应用中,经常需要绕任意点 (x0, y0) 旋转。其通用变换步骤如下 :

  1. 平移 :将整个坐标系平移,使旋转中心 (x0, y0) 移动到原点。点 P 的坐标变为 (x - x0, y - y0)
  2. 旋转 :对平移后的点应用绕原点的旋转公式,得到 (x_temp, y_temp)
  3. 逆平移 :将旋转后的点坐标平移回去,得到最终坐标 (x', y')

公式总结如下:
x' = (x - x0) * cos(β) - (y - y0) * sin(β) + x0
y' = (x - x0) * sin(β) + (y - y0) * cos(β) + y0

总结

通过几何三角关系、线性代数矩阵和复数理论三种方法,我们可以一致地推导出二维点绕原点逆时针旋转的坐标变换公式。该公式是众多空间变换的基石,其矩阵形式尤其适合计算机处理。理解其推导过程有助于更深入地掌握图形变换的原理。


参考来源

相关推荐
LaughingZhu42 分钟前
Product Hunt 每日热榜 | 2026-05-08
人工智能·经验分享·深度学习·神经网络·产品运营
智者知已应修善业6 小时前
【51单片机模拟生日蜡烛】2023-10-10
c++·经验分享·笔记·算法·51单片机
智者知已应修善业7 小时前
【51单片机如何让LED灯从一亮到八,再从八亮到一】2023-10-13
c++·经验分享·笔记·算法·51单片机
weixin_537217069 小时前
Ai产品经理资源合集(第五辑)
经验分享
谙弆悕博士10 小时前
快速学C语言—— 第0章:C语言简介
c语言·开发语言·经验分享·笔记·程序人生·课程设计·学习方法
得闲喝茶11 小时前
JavaScript在数据处理的应用
开发语言·前端·javascript·经验分享·笔记
LuminousCPP13 小时前
C 语言动态内存管理全解析:从基础函数到柔性数组与内存分区
c语言·经验分享·笔记·学习·柔性数组
再玩一会儿看代码14 小时前
Token 统计中的“命中缓存”和“未命中缓存”是什么意思?
经验分享·学习·缓存·电脑
sbjdhjd14 小时前
Docker 网络工业级实战手册
linux·运维·经验分享·笔记·docker·云原生·云计算
LuminousCPP15 小时前
C 语言文件操作全攻略:从基础读写到随机访问与缓冲区原理
c语言·经验分享·笔记·文件操作