You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算二维空间中绕非原点旋转的点的旋转中心

2D旋转中心计算方法

前提说明

单个绕固定中心旋转的点,最少需要3个非共线的观测位置才能唯一确定旋转中心。仅2个观测位置时,只能得到旋转中心所在的垂直平分线,有无穷多解。

无噪声场景几何解法

核心依据:旋转中心到所有观测点的距离完全相等。
假设三个观测点坐标分别为$P_1(x_1,y_1)$、$P_2(x_2,y_2)$、$P_3(x_3,y_3)$,待求旋转中心为$O(x_0,y_0)$,计算步骤如下:

  • 对$P_1$和$P_2$列距离相等的方程,展开消去二次项后得到第一个线性方程:
    $2(x_2 - x_1)x_0 + 2(y_2 - y_1)y_0 = x_2^2 + y_2^2 - x_1^2 - y_1^2$
  • 对$P_2$和$P_3$做同样处理,得到第二个线性方程:
    $2(x_3 - x_2)x_0 + 2(y_3 - y_2)y_0 = x_3^2 + y_3^2 - x_2^2 - y_2^2$
  • 求解上述二元一次方程组,得到的$x_0$、$y_0$就是旋转中心坐标。

你也可以通过几何作图验证:分别作$P_1P_2$、$P_2P_3$的垂直平分线,两条线的交点就是旋转中心,和方程求解结果完全一致。

有噪声场景最小二乘解法

如果观测点存在测量误差,或你有超过3个观测点,可以用最小二乘拟合得到鲁棒性更高的结果:

  • 将所有相邻观测点对按上述方式生成对应的线性方程,得到超定方程组$Ax = b$
  • 其中每一行对应的系数为$A_i = [2(x_{i+1}-x_i), 2(y_{i+1}-y_i)]$,$b_i = x_{i+1}^2 + y_{i+1}^2 - x_i^2 - y_i^2$
  • 求解最小二乘解$x = (ATA){-1}A^Tb$,$x$的两个分量就是旋转中心的最优估计值。

Python 实现示例

import numpy as np

def find_rotation_center(points):
    # points为形状(N,2)的数组,存储N个观测点坐标,N≥3
    A = []
    b = []
    for i in range(len(points) - 1):
        x1, y1 = points[i]
        x2, y2 = points[i+1]
        A.append([2 * (x2 - x1), 2 * (y2 - y1)])
        b.append(x2**2 + y2**2 - x1**2 - y1**2)
    A = np.array(A)
    b = np.array(b)
    # 最小二乘求解,返回(x0, y0)
    center, _, _, _ = np.linalg.lstsq(A, b, rcond=None)
    return center

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:54:02