找到两个全等三角形之间的旋转

时间:2011-05-26 01:14:01

标签: c++ 3d rotation

我正在研究3D网格解析工具。目前,我正在尝试确定3D空间中两个全等三角形之间的旋转 - 我们称之为ABCDEF

我可以将点AD转换为相同的位置,现在需要确定将DEF放置在同一平面上并且方向相同的旋转ABC但我对数学的熟悉程度不够。有谁能告诉我如何解决这个问题?

我一直在考虑使用ABDE的叉积确定旋转轴,然后使用点积找到一个角度,然后用它们制作四元数;但我不知道这是否总能正确对齐它们。

我是否误解了上述想法?它总是会对齐三角形吗?如果不能,找到轮换的另一种方法是什么?

2 个答案:

答案 0 :(得分:3)

你的第一部分将AB旋转到DE(或其他方式)的权利。但这只是一个边缘。要对齐其他两个,您仍需要将C旋转到F(第一次旋转后)。可以通过使用您提出的方法将三角形的两个面法线相互旋转来计算必要的角度和轴(根据您的问题,我想您知道如何计算三角形的面法线)。

编辑:请按顺序执行以下步骤:

  1. 将A翻译成D
  2. 将AB旋转到DE
  3. 通过将三角形的面法线相互旋转来将C旋转到F
  4. 你必须取已经部分变换的三角形的面法线(在第2步之后),但它们可能与原始的相同(不确定)。然后,您可以将这些转换连接成一个。

答案 1 :(得分:0)

  1. 翻译ABC,使A处ABC的曲面法线与底部的D点重合。
  2. 旋转ABC,使A处的曲面法线与D处的曲面法线重合。 这是唯一棘手的部分。幸运的是,这是一件很常见的事情。它与旋转3D摄像机方向相同。 Google找到了this reference
  3. 现在在原点旋转三角形ABC,使得B和C与D和E重合。这是标准的2D旋转矩阵。