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

无循环实现立方体X/Y轴旋转:矩阵与张量逐行相乘方法

无循环实现立方体双旋转后的边坐标计算

需求概述

不使用循环,计算立方体经过X轴、Y轴两次旋转后的边顶点坐标,原始数据定义如下:

立方体顶点数据

import numpy as np

cube_vertices = np.array([[0, 0, 0], 
                          [1, 0, 0], 
                          [1, 1, 0], 
                          [0, 1, 0], 
                          [0, 0, 1], 
                          [1, 0, 1], 
                          [0, 1, 1], 
                          [1, 1, 1]])

立方体边数据

cube_edges = np.array([[cube_vertices[0], cube_vertices[1]],
                       [cube_vertices[0], cube_vertices[3]],
                       [cube_vertices[1], cube_vertices[2]],
                       [cube_vertices[3], cube_vertices[2]],
                       [cube_vertices[1], cube_vertices[5]],
                       [cube_vertices[2], cube_vertices[7]],
                       [cube_vertices[3], cube_vertices[6]],
                       [cube_vertices[0], cube_vertices[4]],
                       [cube_vertices[4], cube_vertices[5]],
                       [cube_vertices[4], cube_vertices[6]],
                       [cube_vertices[6], cube_vertices[7]],
                       [cube_vertices[5], cube_vertices[7]]])

错误点修正

你之前的实现存在两个关键问题:

  1. 旋转矩阵计算错误:使用Rx * Ry是元素级乘法,而非矩阵乘法,无法得到正确的复合旋转效果。
  2. 冗余的矩阵复制:无需将旋转矩阵tile为(12,2,3,3),numpy的广播机制可自动适配批量运算。

正确实现方案

步骤1:计算复合旋转矩阵

先定义X轴、Y轴的旋转矩阵,再通过矩阵乘法得到复合旋转矩阵(旋转顺序:先绕X轴旋转theta,再绕Y轴旋转phi,若需调整顺序,交换矩阵乘法顺序即可):

phi, theta = 0.1, 0.1

# X轴旋转矩阵
Rx = np.array([[1, 0, 0], 
               [0, np.cos(theta), -np.sin(theta)], 
               [0, np.sin(theta), np.cos(theta)]])

# Y轴旋转矩阵
Ry = np.array([[np.cos(phi), 0, np.sin(phi)], 
               [0, 1, 0], 
               [-np.sin(phi), 0, np.cos(phi)]])

# 复合旋转矩阵(先X转,再Y转)
R = Ry @ Rx

步骤2:批量旋转边顶点

利用numpy广播特性,直接对cube_edges做批量矩阵乘法,无需循环,输出形状为(12,2,3)的旋转后边坐标:

rotated_edges = np.matmul(cube_edges, R)
# 或更简洁的写法:rotated_edges = cube_edges @ R

验证结果

rotated_edges的每个元素对应原边顶点旋转后的坐标,例如原第一条边[0,0,0]和[1,0,0]旋转后的结果可通过以下查看:

print(rotated_edges[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:13:14