[英]Combine more than 3 rotations (Quaternions)
我有一個3D點,並且該點有x,y,z旋轉 ( qInitial
)。 我想旋轉該點以上 (由一定程度,可能是0至360)圍繞y軸線( qYextra
)。 我怎樣才能計算出最終的Euler旋轉 ( qResult.eulerAngles
) 就是這4個旋轉(XYZY)的組合 ?
我嘗試計算初始四元數旋轉以及要應用的額外旋轉。 然后將這兩個四元數相乘。 但是,我得到了奇怪的結果(可能是萬向節鎖) 。
C#中的代碼。 統一。
1. Quaternion qX = Quaternion.AngleAxis(rotationFromBvh.x,Vector3.right);
2. Quaternion qY = Quaternion.AngleAxis(rotationFromBvh.y,Vector3.up);
3. Quaternion qZ = Quaternion.AngleAxis(rotationFromBvh.z,Vector3.forward);
4. Quaternion qYextra = Quaternion.AngleAxis(angle,Vector3.up);
Quaternion qInitial = qY * qX * qZ; // Yes. This is the correct order.
qY*qX*qZ
的Euler x,y,z結果與Quaternion.Euler(rotationFromBvh)
完全相同qY*qX*qZ
Quaternion.Euler(rotationFromBvh)
Quaternion qResult = qInitial * qYextra;
return qResult.eulerAngles;
我可以確認當第4次旋轉為0度 ( qYextra = identity
)時, 代碼工作正常 (無萬向節鎖定)。 表示qInitial
是正確的。 因此,該錯誤可能是由於這兩個旋轉 ( qInitial
和qYextra
)的組合, 或者是由於從四元數到歐拉的轉換所致。
示例:( qYextra
角度為120度)
結果:
qInitial.eulerAngles
給出了這些結果: applying_qInitial_rotation
qResult.eulerAngles
給出了這些結果: applying_qResult_rotation
預期成績:
預期結果應類似於qInitial
但繞y旋轉120度。
有什么建議么? 我還沒有找到解決方案,也許我不會。
在您的問題中,您寫道:
如何計算這四個旋轉(xyzy)的組合的最終歐拉旋轉?
但是,在您的代碼中,您編寫了
Quaternion qInitial = qY * qX * qZ; // Multiply them in the correct order.
我不知道統一性,但我曾希望您希望旋轉的順序匹配x,y,z,而不是y,x,z。
您說它在y旋轉為0時有效,在這種情況下y旋轉在順序中的位置變得無關緊要。
如果改寫下面的代碼,您得到正確的結果嗎?
Quaternion qInitial = qX * qY * qZ; // Multiply them in the correct order.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.