python - 使用矩阵变换和 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.5
Z 轴是什么?它代表什么?
Z轴后变换的值的存在让我觉得我的方法不正确。请告诉我我是否以错误的方式进行此操作。
解决方案
正如@PaulPanzer 指出的那样,我从错误的方向点了新向量。解决方案是
np.dot(NE_1, NEW_SPACE)
推荐阅读
- autodesk-forge - Forge 正在规范化 obj 文件的坐标
- sapui5 - 错误:在启用 ui5-tooling 时无法从 resources/sap/ushell/library.js 加载“sap/ushell/library.js”
- node.js - 将 async.EachSeries 与猫鼬 findOneAndUpdate 一起使用
- firebase - 返回文档快照
- javascript - 如何存储要在函数中多次使用的异步函数的值,而不必多次进行异步调用?
- php - 加载 pdf 文档镶边失败
- c++ - 为什么我在函数 main 中引用的 guessingGame 中出现 LNK2019 错误?
- swift - 如何在 SwiftUI 中更改 SceneView 3D 对象的背景颜色
- java - 需要使用java在免费标记模板中添加多个字段
- javascript - 基于 Web 应用程序的屏幕大小动态调整大小表