【问题标题】:Rotation and translation of 3D points based on a triangle in PythonPython中基于三角形的3D点的旋转和平移
【发布时间】:2021-03-27 08:30:16
【问题描述】:

我确定这已经是答案了,但我仍然对我在 stackoverflow 上找到的帖子感到困惑,这就是我决定发布我的问题的原因。

我对几何变换不是很熟悉(除了平移,但这个很简单),我需要根据图片中描述的 3 个点的选择来变换一组 3D 点

这是我目前的计划:

  1. 基于 3 个点创建一个三角形(我们称之为tri)-> 可以
  2. 计算我的 3 个点形成的三角形的质心 -> 这样就可以了
  3. 将所有点平移到原点 (0,0,0) -> 也可以
  4. 旋转每个点,使 tri 的点 Z 坐标等于 0 -> 这是我迷路了,不确定如何处理(没有任何错误...)

我知道这不是一个难题,但如果有人知道如何使用 numpy 进行处理,例如,我很乐意 :-)

感谢您的帮助:-)

【问题讨论】:

  • 您的问题会有多种解决方案 - 例如,整个三角形可以上下颠倒。您需要做的是找到定义三角形的平面(我们称之为 P)。然后你需要找到 z 轴和 P 的法线向量之间的角度(我们称之为 n)。您还需要找到垂直于 z 轴和 n 的旋转轴(称为 u)。然后使用 theta 围绕 u 执行轴角旋转。这种旋转应该应用于所有点。

标签: python 3d rotation translation


【解决方案1】:

在第 4 步中,您需要旋转三角形,使其法线垂直。

你需要先计算三角形的法线。您可以通过使用沿三角形两侧的两个向量(a 和 b)之间的叉积来实现:N = a x b。

然后您可以使用三角形法线与 Z 轴之间的叉积计算旋转轴 A:A = N x Z。

然后您可以使用轴 A 旋转点。

正如在别处指出的那样,解决方案并不是唯一的。

【讨论】:

  • 是的,我认为这是最简单的方法。您还可以计算旋转法线 N 以与矢量 Z 对齐的四元数(请参阅stackoverflow.com/questions/1171849/…),然后将该四元数应用于所有点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多