我不确定这个主题是更适合在这里发布还是在数学溢出站。因为我在使用numpy,所以我想在这里发布它。
我正在尝试将一个三维空间中的立方体旋转,然后投影到一个二维平面上。
我从单位矩阵开始:
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 ])
这种情况是可以理解的,因为两个点都被压平到了同一个位置。但是,在Z轴上的-0.5
代表什么?它表示什么意思?
在变换后Z轴上存在一个值让我觉得我的方法可能不正确。如果我走错了,请告诉我正确的方法。
I -> RY -> FLAT
。 - dopatramanNE_1/2
,这就像先乘以FLAT
一样。(回想一下矩阵乘法是_结合律_,意味着括号(如果您愿意,可以理解为时间顺序)不重要,但不是_交换律_,意味着左右顺序很重要。) - Paul Panzer