如何使用四元数绕一个点旋转对象?

5
在我的3D应用程序中,我将对象的位置存储在一个向量中,并将其相对于原点的旋转存储在四元数中。我需要将对象围绕具有任意起点的向量旋转。我尝试将位置-向量起点和旋转转换为矩阵,旋转矩阵,然后从结果矩阵中提取位置和旋转作为向量和四元数。位置正确,但旋转保持不变(对象围绕给定向量旋转,但始终面向相同方向)。
我的方法错了还是有bug?
2个回答

9

我不确定为什么您期望旋转发生改变。您有编程“实体”代表原点、目标点和旋转。基于其他两个“实体”计算目标点不应影响它们。

那通常的方法呢?如果您需要围绕点(a, b, c)旋转位置(x, y, z),首先将位置平移,以便旋转将围绕原点进行:使用(x-a, y-b, z-c)作为位置,像平常一样围绕原点旋转以获得新的平移后位置(x'-a, y'-b, z'-c),并且平移回去并获取您的新位置(x', y', z')。


这是我正在做的事情。对象围绕一个具有任意起点的向量移动,但它始终面向相同的方向。我应该面向向量的起点。 我编辑了问题以澄清我的算法。 - user17544
如果我理解正确的话,您需要添加另一个旋转,围绕着一个与您提到的向量平行的向量,但是它要穿过对象的中心 - Oren Shalev
你是对的。我通过围绕物体中心旋转,然后围绕给定向量旋转物体位置来解决了这个问题。 - user17544
你救了我的一天!谢谢您。 - rkachach
@redobot 非常欢迎!很高兴知道我写了那么久的东西仍然有用。 - Oren Shalev

2

我对四元数不是很熟悉,也许这完全与主题无关,但你不能围绕一个点旋转3D对象,旋转轴必须是一条线。


公正的观点。我是指围绕具有任意起点的向量旋转。我编辑了问题。 - user17544

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接