You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

旋转后点的原始坐标求解问询:已知新坐标等信息能否反推

如何从旋转后的坐标反推原始坐标

当然可以反推!这本质是旋转变换的逆运算,核心思路是:将旋转后的点围绕同一个旋转中心反向旋转(即旋转-θ角度),就能得到原始点。结合矩形的特性,我们可以通过尺寸确定旋转中心的位置。

通用步骤(假设旋转围绕矩形自身中心)

在绝大多数图形系统中,对象的旋转默认围绕自身中心进行,以下是通用推导步骤:

1. 明确关键参数

先理清已知条件和目标:

  • 矩形宽度为W,高度为H
  • 旋转后的目标点坐标为P₁(x₁, y₁)(比如矩形的左上角顶点)
  • 旋转角度为θ(注意:不同系统对角度正负的定义可能不同,通常逆时针为正、顺时针为负)
  • 我们要求的原始点坐标为P₀(x₀, y₀)

2. 计算旋转中心的全局坐标

旋转中心C是矩形的自身中心,仅围绕自身中心旋转时,它的全局坐标是固定不变的。但旋转后,中心C相对于P₁的位置,是原始中心偏移量(W/2, H/2)旋转θ后的结果:

# 向量旋转公式:将向量(x,y)旋转θ角
rotate(x, y, θ) = (x*cosθ - y*sinθ, x*sinθ + y*cosθ)

# 旋转后中心相对于P₁的偏移量
offset_rotated = rotate(W/2, H/2, θ)

# 旋转中心C的全局坐标
C_x = x₁ + offset_rotated[0]
C_y = y₁ + offset_rotated[1]

3. 转换为中心局部坐标系

计算P₁相对于旋转中心C的偏移量:

P₁_local_x = x₁ - C_x
P₁_local_y = y₁ - C_y

4. 对局部坐标进行逆旋转

逆旋转等价于用代入旋转公式,利用三角函数性质cos(-θ)=cosθsin(-θ)=-sinθ,可以简化计算:

P₀_local_x = P₁_local_x * cosθ + P₁_local_y * sinθ
P₀_local_y = -P₁_local_x * sinθ + P₁_local_y * cosθ

5. 转换回全局坐标

将逆旋转后的局部坐标加回中心坐标,得到原始点P₀

x₀ = P₀_local_x + C_x
y₀ = P₀_local_y + C_y

用你的例子验证

你的参数:W=500, H=200P₁=(503.4, 396.48)θ=178.02°

  1. 角度转弧度:θ_rad = 178.02 * π / 180 ≈ 3.107,计算三角函数值:cosθ≈-0.9994sinθ≈0.0349
  2. 计算旋转中心C
    offset_rotated = rotate(250, 100, 178.02°) = (-253.34, -91.215)
    C_x = 503.4 -253.34 = 250.06
    C_y = 396.48 -91.215 = 305.265
    
  3. 计算局部坐标并逆旋转,最终得到x₀≈0.05y₀≈205.265

这个结果和你给出的原始坐标(300,200)有偏差,大概率是因为:

  • 旋转中心不是矩形自身中心
  • 你的坐标系统y轴方向与常规不同(比如y轴向上)
  • 角度正负定义或旋转方向与默认规则相反
  • 你给出的坐标是矩形的其他顶点(比如中心、右下角)

核心方法是完全成立的:只要明确旋转中心,对旋转后的点进行反向旋转就能得到原始点。

补充:如果旋转中心是外部点

如果旋转中心是已知的外部点C(cx, cy),步骤会更简洁:

  1. 计算P₁相对于C的局部坐标:(x₁-cx, y₁-cy)
  2. 对该局部坐标旋转角,得到原始点的局部坐标
  3. 加回C的坐标得到P₀

内容的提问来源于stack exchange,提问作者Julien Planche

火山引擎 最新活动