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

如何将2×32的numpy坐标数组绕中心旋转45度?

问题:如何简便快捷地将2×32的Numpy坐标数组绕中心旋转45度?

我拥有一个存储x、y坐标的2×32 numpy数组A,想要将其绕中心旋转45度。示例代码如下:

x = np.tile([1,2,3,4],8)
y = np.repeat([1,2,3,4,5,6,7,8],4)
A = np.vstack((x,y)) # just a quick example

请问是否存在简便快捷的实现方式?(示例图示:start表示旋转中心)


回答

当然有简便高效的实现方式!绕中心旋转坐标的核心逻辑其实很清晰,用Numpy的矢量运算就能快速完成,完全不用逐个处理每个坐标点。

核心思路

绕任意中心旋转的步骤可以拆解为三步:

  • 先把所有坐标平移到原点(让旋转中心和原点重合)
  • 对平移后的坐标应用旋转矩阵
  • 最后把旋转后的坐标平移回原中心位置

完整代码实现

结合你的示例数组A,具体代码如下:

import numpy as np

# 你的示例坐标数组生成
x = np.tile([1,2,3,4],8)
y = np.repeat([1,2,3,4,5,6,7,8],4)
A = np.vstack((x,y))  # 形状为(2, 32),每一列对应一个(x,y)坐标

# 1. 计算旋转中心(这里取所有坐标的均值,对应你说的"start"点)
center = A.mean(axis=1, keepdims=True)  # 保持(2,1)的形状,方便后续广播运算

# 2. 构造45度旋转矩阵
theta = np.pi / 4  # 将角度转换为弧度
rotation_matrix = np.array([
    [np.cos(theta), -np.sin(theta)],
    [np.sin(theta), np.cos(theta)]
])

# 3. 执行旋转操作:平移到原点 → 旋转 → 平移回中心
A_rotated = rotation_matrix @ (A - center) + center

关键细节说明

  • 用Numpy的矩阵乘法运算符@来批量处理所有坐标,比循环快几个数量级,完美适配你2×N的数组结构。
  • keepdims=True确保center的维度和A匹配,避免手动调整形状的麻烦,Numpy会自动完成广播运算。
  • 如果你的旋转中心不是坐标均值(比如是某个固定点(cx, cy)),只需把center替换为np.array([[cx], [cy]])即可,其余代码完全不用改。

这种方法既简洁又高效,完全满足你“简便快捷”的需求~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:45:39