【问题标题】:How to calculate the quaternion that represents a triangle's 3D rotation?如何计算代表三角形 3D 旋转的四元数?
【发布时间】:2012-06-28 09:09:36
【问题描述】:

或者换个角度来看,假设我们有 2 个大小相同的三角形,它们位于 3D 空间的不同部分并定位。您如何计算描述旋转的四元数,以便将四元数应用于三角形 A 会使其位于三角形 B 上?很难看出如何找到 A 和 B 的法线并从中计算四元数是如何工作的,因为法线向量不包含有关旋转的信息(或者更确切地说,它假定两个三角形法线的标准基本框架,因此丢弃有价值的信息)。看来您需要找到从每个三角形(a,b,c)到其他三角形(a,b,c)的向量,并以某种方式从中构造一个四元数。远远超出我的范围,任何数学家都可以把它哑口无言。

【问题讨论】:

  • 我很难理解你在问什么。将三角形 A 旋转到三角形 B 与将 A 点旋转到 B 点不一样吗?你关心方向/比例吗?是否可以通过轮换来做你想做的事?
  • 轮换是不够的。您可能还需要翻译。
  • Darcy Rayner:是的,但是有三个点,它们的距离/旋转不同:例如,三角形 A 朝南,三角形 B 朝东,必须有一个四元数会旋转A 映射 B。使用法线制作四元数是有问题的,因为法线将是 A(0,0,1) 和 B(1,0,0),无论三角形 B 是否已旋转 45 度围绕 x 轴,而 A 保持不旋转。四元数必须能够包含围绕 3 轴的旋转。如何做到这一点是我无法弄清楚的。

标签: quaternions


【解决方案1】:

首先定位法线向量,然后定位平面。

来源=(s1,s2,s3)

目标=(t1,t2,t3)

NormSource = (s1 - s2)cross(s1 - s3)

NormTarget = (t1 - t2)cross(t1 - t3)

Quat1 = getRotationTo (NormSource,NormTarget)

Quat2 = getRotationTo (Quat1 * (s1 - s2),(t1 - t2));

QuatFinal = Quat2 * Quat1

【讨论】:

  • 考虑一下,上面的方法是行不通的,因为穿过目标给出的法线不会保留构造它的旋转。也就是说,用于构造范数的基坐标系(t 轴和 b 轴)可能会旋转而不是源的基坐标系,但计算出的范数只是一个向量,无法保留该旋转信息。因此,从 nSource 到 nTarget 构造的四元数不会有这个关键的基础框架旋转。
  • 是的,这就是为什么我有秒 Quat2。这是基本框架旋转。
  • Sumeet 我提取了答案,希望能引起您的注意。您能否澄清变量(st2 - st1);你的意思是 (s2 - s1) 还是 (t2 - t1)?
  • 我明白了。 Quat1 是 norm 从 src 到 dest 的旋转。然后通过 Quat1 旋转 t vec。 Quat2 是在 dest 从旋转的 t 到 t 的旋转。 QuatFinal 是这两个旋转的集合。因此 (st2 - st1) 必须是 (t2 - t1)。
  • 另外,你需要(t2-t1)需要是(t1-t2)。我也会进行此编辑,因为此用户自 2012 年以来一直不活跃。
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 2019-09-08
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多