如何将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
相关产品推荐
相关产品推荐

