使用矩阵变换和numpy将立方体投影到平面上

dop*_*man 5 python numpy linear-algebra

我不确定该主题是否更适合此处或数学上的溢出。由于我使用的是numpy,因此我想将其发布在这里。

我正在尝试在3维空间中旋转多维数据集,然后将其投影到2维平面上。

我从Identiy矩阵开始:

import numpy as np

I = [[1,0,0],
     [0,1,0],
     [0,0,1]]
Run Code Online (Sandbox Code Playgroud)

然后,我将旋转变换应用于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)
Run Code Online (Sandbox Code Playgroud)

在这一点上,我有一个新的基础空间,它已绕Y轴旋转了30度。

现在,我想将此投影到二维空间上。我认为,这个新空间基本上是Z轴设置为零的标识基础:

FLAT = [[1,0,0],
        [0,1,0],
        [0,0,0]]
Run Code Online (Sandbox Code Playgroud)

所以现在,我认为我可以对此进行组合以完成从立方体到正方形的完整转换:

NEW_SPACE = np.dot(I_RY, FLAT)
Run Code Online (Sandbox Code Playgroud)

剩下的就是变换原始立方体的点。假设原始多维数据集的东北点设置为[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)
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下几点:

array([ 0.8660254,  1.       , -0.5      ])
Run Code Online (Sandbox Code Playgroud)

之所以这样签出,是因为两个点都被展平为同一件事。但是,-0.5Z轴上的是多少?它代表什么?

Z轴后变换上存在一个值,使我认为我的方法不正确。请告诉我是否要以错误的方式进行操作。

dop*_*man 3

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

np.dot(NE_1, NEW_SPACE)
Run Code Online (Sandbox Code Playgroud)