【问题标题】:Finding rotation between two congruent triangles寻找两个全等三角形之间的旋转
【发布时间】:2011-05-26 01:14:00
【问题描述】:

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

我能够将点 AD 平移到同一个位置,现在需要确定一个旋转,以将 DEF 放置在与 ABC 相同的平面和相同的方向上,但我'我对数学不够熟悉,无法做到这一点。谁能告诉我如何解决这个问题?

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

我对上述想法有误吗?它会始终对齐三角形吗?如果不会,还有什么替代方法可以找到轮换?

【问题讨论】:

    标签: c++ 3d rotation


    【解决方案1】:

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

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

    1. 将 A 翻译成 D
    2. 将 AB 旋转到 DE 上
    3. 通过将三角形的面法线旋转到彼此上来将 C 旋转到 F

    您必须获取已经部分转换的三角形的面法线(在第 2 步之后),但它们可能与原始三角形相同(不确定)。然后,您可以将这些转换合并为一个。

    【讨论】:

    • 所以为了确保我在跟随,你是说我可以通过计算每个三角形的面法线,找到它们的十字和点积并制作一个四元数,在一次迭代中获得完整的旋转?我不需要将AD 实际翻译到一个公共位置,确定一个从BE 的旋转,然后为CF 找到另一个旋转,然后组合这些旋转?
    • 不,除了你的步骤之外,你必须按照我说的去做。我将编辑我的答案。
    • 明白了。感谢您的澄清。我想我能应付。
    【解决方案2】:
    1. 平移 ABC 以使 ABC 在 A 处的曲面法线与底部的 D 点重合。
    2. 旋转 ABC,使 A 处的曲面法线与 D 处的曲面法线重合。 这是唯一棘手的部分。幸运的是,这是一件很常见的事情。这与旋转 3D 摄像机方向相同。谷歌找到了this reference
    3. 现在以 A 为原点旋转三角形 ABC,使 B 和 C 与 D 和 E 重合。这是一个标准的 2D 旋转矩阵。

    【讨论】:

      猜你喜欢
      • 2014-08-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2017-12-16
      • 2019-03-29
      相关资源
      最近更新 更多