Python 中基于三角形的 3D 点的旋转和平移
Rotation and translation of 3D points based on a triangle in Python
我确定这已经是答案,但我仍然对我在 Whosebug 上找到的 post 感到困惑,这就是为什么我决定 post 我的问题。
我不是很熟悉几何变换(除了平移,但这个很简单),我需要根据图片中描述的选择 3 个点来变换一组 3D 点
这是我目前的计划:
- 根据 3 个点创建一个三角形(我们称之为
tri
)-> 可以
- 计算我的3个点组成的三角形的质心->这个就可以了
- 将所有点平移到原点 (0,0,0) -> 这也可以
- 旋转每个点,使
tri
的点 Z
坐标等于 0 -> 这是我迷路了,不确定如何处理(没有任何错误...)
我知道这不是一个难题,但是如果有人知道如何使用 numpy 进行处理,我愿意:-)
感谢您的帮助:-)
在第 4 步中,您需要旋转三角形,使其法线垂直。
你需要先计算三角形的法线。您可以通过使用三角形两侧的两个向量(a 和 b)之间的叉积来实现:N = a x b.
然后您可以使用三角形法线与 Z 轴之间的叉积计算旋转轴 A:A = N x Z。
然后您可以使用轴 A 旋转这些点。
如别处所指出的,解不是唯一的。
我确定这已经是答案,但我仍然对我在 Whosebug 上找到的 post 感到困惑,这就是为什么我决定 post 我的问题。
我不是很熟悉几何变换(除了平移,但这个很简单),我需要根据图片中描述的选择 3 个点来变换一组 3D 点
这是我目前的计划:
- 根据 3 个点创建一个三角形(我们称之为
tri
)-> 可以 - 计算我的3个点组成的三角形的质心->这个就可以了
- 将所有点平移到原点 (0,0,0) -> 这也可以
- 旋转每个点,使
tri
的点Z
坐标等于 0 -> 这是我迷路了,不确定如何处理(没有任何错误...)
我知道这不是一个难题,但是如果有人知道如何使用 numpy 进行处理,我愿意:-)
感谢您的帮助:-)
在第 4 步中,您需要旋转三角形,使其法线垂直。
你需要先计算三角形的法线。您可以通过使用三角形两侧的两个向量(a 和 b)之间的叉积来实现:N = a x b.
然后您可以使用三角形法线与 Z 轴之间的叉积计算旋转轴 A:A = N x Z。
然后您可以使用轴 A 旋转这些点。
如别处所指出的,解不是唯一的。