簡體   English   中英

給定 3 度旋轉,如何旋轉球體表面上的點?

[英]How do I rotate a point on the surface of a sphere given 3 degrees of rotation?

我在需要旋轉的球體上有一個點。 我有 3 種不同的旋轉角度(滾動、俯仰、偏航)。 是否有任何公式可以用來計算每次旋轉后點的最終位置? 為簡單起見,如果有幫助,球體可以以原點為中心。

我試過尋找不同的輪換方式,但沒有什么能完全符合我的要求。 如果我只需要旋轉球體,我可以這樣做,但我需要知道基於球體旋轉的點的 position。

以 Unity 為例,這在一個單獨的項目中是不統一的,所以使用他們的庫是不可能的:

如果原點在 (1, 0, 0) 在此處輸入圖像描述

然后球體旋轉 [45, 30, 15]: 在此處輸入圖像描述 該點的新 (x, y, z) 是多少?

如果您有一個給定的旋轉作為四元數 q,那么您可以像這樣旋轉您的點 (Vector3) p:

Vector3 pRotated = q * p;

如果你在歐拉角中有旋轉,那么你總是可以像這樣將它轉換為四元數(其中 x、y 和 z 是圍繞這些軸的旋轉度數):

Quaternion q = Quaternion.Euler(x,y,z);

請注意,Unity 的歐拉角被定義為首先 object 繞 z 軸旋轉,然后繞 x 軸,最后繞 y 軸 - 這些軸都在父變換的空間中,如果有的話(不是對象的局部軸,每次旋轉都會移動)。

所以我假設 z 軸是滾動,x 軸是俯仰,y 軸是偏航。您可能必須切換某些軸上的符號以匹配預期結果 - 例如,正 x 旋轉將使 object 向下傾斜(假設對象的向前概念是在其正 z 方向並且向上是在其正 y 方向)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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