我希望能找到兩組兩個向量之間的旋轉,作爲四元數。在每一對中,矢量將彼此成直角並具有單位長度(基本上以正交基準爲基礎的兩個矢量)。兩組向量之間的四元數旋轉
我當前的代碼看起來是這樣的:
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