簡體   English   中英

合並3個以上的旋轉(四元數)

[英]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是正確的。 因此,該錯誤可能是由於這兩個旋轉qInitialqYextra )的組合, 或者是由於從四元數到歐拉的轉換所致。

示例:( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM