我希望能找到两组两个向量之间的旋转,作为四元数。在每一对中,矢量将彼此成直角并具有单位长度(基本上以正交基准为基础的两个矢量)。两组向量之间的四元数旋转
我当前的代码看起来是这样的:
Vector3 look1, up1, right1, look2, up2, right2;
// look1, up1, right1 form orthonormal basis,
// ditto with look2, up2, and right2
Vector3 lookRotateAxis = look1 % look2;
// operator% defined as cross product for convenience
float lookRotateAngle = acos(look1 * look2);
// operator* defined as dot product for convenience
Quaternion lookRotate;
lookRotate.makeRotation(lookRotateAngle, lookRotateAxis);
up1Transformed = lookRotate.rotateVector(up1);
Vector3 upRotateAxis = up1Transformed % up2;
float upRotateAngle = up1Transformed * up2;
Quaternion upRotate;
upRotate.makeRotation(upRotateAngle, upRotateAxis);
Quaternion finalRotation = upRotate * lookRotate;
// quaternion finalRotation rotates basis 1 to basis 2
我现在使用的方法是,首先每对找到两个向量之间的四元数旋转,然后乘以两者之间的四元数旋转每一对中的第二个向量。这导致了一个单一的四元数,我可以通过旋转两个矢量来得到另外两个矢量。有没有更简单的方法来计算四元数,而不是通过乘以两个旋转,而是计算单个旋转?
谢谢!
没有代码可以看,这纯粹是一个数学问题...所以“更快地做到”只能用非常抽象的数学方法来回答......不懂数学的人不能帮助与一般的性能编码调整。由于这是一个编程站点,您是否可以编辑您的问题(通过编辑按钮)以提供您现在以[MCVE](http://stackoverflow.com/help/mcve)的形式写入的内容? *(在早期的问题中,最好按照规则生活“包含一些代码”,并且只有在稍后考虑包含哪些非代码问题(包括主题考虑的问题)时才会生效......)* – HostileFork
@HostileFork感谢您的建议,我会考虑编辑。我对这个网站并不陌生,我的旧帐户被意外地恶意破坏。 – Josh
@Josh如果它是恶意做的,那不是偶然的。无论哪种方式。 =( – WhozCraig