【发布时间】:2013-06-07 07:31:57
【问题描述】:
在this comment 中强烈建议我们永远不要使用欧拉角。我知道欧拉角存在一些限制,尤其是万向节锁定,但我想知道在没有欧拉角的情况下通常使用的最佳技术或技术集?
关于这个主题的大多数讨论都涉及从欧拉角转换为四元数,这是一件简单的事情。但是我读过的关于在没有欧拉角的情况下进行旋转的唯一方法是使用以下技术从两个向量中创建一个四元数,如 Stan Melax 在“游戏编程宝石”中的文章“最短弧四元数”中所述:
template <typename T>
inline QuaternionT<T> QuaternionT<T>::CreateFromVectors(const Vector3<T>& v0, const Vector3<T>& v1)
{
Vector3<T> c = v0.Cross(v1);
T d = v0.Dot(v1);
T s = std::sqrt((1 + d) * 2);
QuaternionT<T> q;
q.x = c.x / s;
q.y = c.y / s;
q.z = c.z / s;
q.w = s / 2.0f;
return q;
}
这是链接评论中提到的方法吗?
【问题讨论】:
-
这可能有助于读者知道评论说“即使您使用四元数,您仍在使用它们 [欧拉角]”。这有助于解释问题的动机。
-
"关于这个主题的大多数讨论都涉及从欧拉角转换为四元数" 不,他们没有。我从未见过任何关于从欧拉角转换为四元数的讨论。我见过关于使用一个而不是另一个的讨论,但我从未见过有人说“用它们制作 3 个四元数,将它们相乘,你的问题就会结束!”
-
我认为人们对这个问题的概念的理解之间确实存在一些根本性的脱节。真的很难理解和谈论这个问题,因为人们要么对他们试图解释的内容有一个非常根本的误解。另一方面,专家们不再真正理解在所有抽象级别上掌握这件事有多难。因此,虽然人们可以在某种程度上谈论如何处理不同系统的机制。然后其他人在没有真正说明这一点的情况下谈论数据的插值。
标签: math graphics 3d transformation