首页 > 解决方案 > 使用矩阵变换和 numpy 将立方体投影到平面上

问题描述

我不确定这个主题是否更适合这里或数学溢出。由于我使用的是 numpy,所以我想我会在这里发布。

我正在尝试在 3 维空间中旋转立方体,然后将其投影到 2 维平面上。

我从身份矩阵开始:

import numpy as np

I = [[1,0,0],
     [0,1,0],
     [0,0,1]]

然后,我对 Y 轴应用旋转变换:

from math import sin, cos

theta = radians(30)
c, s = cos(theta), sin(theta)
RY = np.array([[c, 0, s],[0, 1, 0], [-s, 0, c]])
# at this point I'd be dotting the Identiy matrix, but I'll include for completeness
I_RY = np.dot(I, RY)

此时我有一个新的基础空间,它围绕 Y 轴旋转了 30 度。

现在,我想将其投影到二维空间中。我想,这个新空间基本上是 Z 轴设置为零的身份基础:

FLAT = [[1,0,0],
        [0,1,0],
        [0,0,0]]

所以现在,我想我可以用它来完成从立方体到正方形的完整转换:

NEW_SPACE = np.dot(I_RY, FLAT)

剩下的就是转换原始立方体的点。假设原始立方体的东北点设置为 [1,1,1] 和 [1,1,-1],我可以像这样得到新点:

NE_1 = np.array([1,1,1])
NE_2 = np.array([1,1,-1])
np.dot(NEW_SPACE, NE_1)
np.dot(NEW_SPACE, NE_2)

但是,这给了我以下信息:

array([ 0.8660254,  1.       , -0.5      ])

这种检查,因为两个点都被压平为同一件事。但是,-0.5Z 轴是什么?它代表什么?

Z轴后变换的值的存在让我觉得我的方法不正确。请告诉我我是否以错误的方式进行此操作。

标签: pythonnumpylinear-algebra

解决方案


正如@PaulPanzer 指出的那样,我从错误的方向点了新向量。解决方案是

np.dot(NE_1, NEW_SPACE)

推荐阅读