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

如何在Python中旋转几何图形使其主轴与坐标系对齐?

问题解决思路
  • 计算坐标的协方差矩阵:由于质心已在原点,直接通过X、Y坐标计算协方差矩阵,该矩阵的特征向量对应图形的主轴方向。
  • 特征值分解:对协方差矩阵进行特征值分解,特征值最大的特征向量即为图形的长轴方向,特征值较小的对应短轴方向。
  • 构造旋转矩阵:利用特征向量组成正交矩阵,这个矩阵就是将图形主轴对齐到坐标轴的旋转矩阵。
  • 坐标旋转:将原始坐标点与旋转矩阵相乘,得到主轴对齐后的新坐标。
Python实现代码
import numpy as np
import matplotlib.pyplot as plt

# 原始坐标
x = [-2.38, -1.68, -0.97, -0.26, -0.97, -0.26, 0.45, 1.15, 1.86, 2.57, 1.86, 1.15, 0.45, -0.26, -0.97, -1.68]
y = [-1.24, -0.53, 0.18, 0.88, 1.59, 2.3, 1.59, 0.88, 0.18, -0.53, -1.24, -0.53, 0.18, -0.53, -1.24, -1.94]

# 将坐标转换为numpy数组,形状为(2, n)
coords = np.vstack((x, y))

# 计算协方差矩阵
cov_matrix = np.cov(coords)

# 特征值分解,获取特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

# 按特征值从大到小排序,获取对应特征向量的索引
sorted_indices = np.argsort(eigenvalues)[::-1]
sorted_eigenvectors = eigenvectors[:, sorted_indices]

# 构造旋转矩阵(特征向量矩阵本身就是正交旋转矩阵)
rotation_matrix = sorted_eigenvectors.T

# 执行坐标旋转
aligned_coords = rotation_matrix @ coords

# 可视化对比效果
plt.figure(figsize=(10, 5))

plt.subplot(121)
plt.scatter(x, y, color='blue')
plt.title('原始图形')
plt.axis('equal')

plt.subplot(122)
plt.scatter(aligned_coords[0], aligned_coords[1], color='red')
plt.title('主轴对齐后图形')
plt.axis('equal')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:54:53