1. 程式人生 > >關於Unity的旋轉,陀螺儀相關的一些記錄

關於Unity的旋轉,陀螺儀相關的一些記錄

隨意記錄一下。

四元素的旋轉:

四元素相乘進行旋轉時,元素前後次序不同,結果會不同。Q1*Q2 != Q2*Q1

旋轉參照的是第一個元素的座標系,等同於對Q1 進行Q2的旋轉操作。

應用1:將物體沿著自身X軸旋轉30°

transform.rotation *= Quaternion.Euler(30,0,0);

應用2:將物體沿著世界的x軸旋轉30°

transform.rotation = Quaternion.Euler(30,0,0) * transform.rotation;

應用3:四元素的相對旋轉

物體第一次轉到Q1,第二次再轉到Q2

Q2相對於Q1的旋轉為

Quaternion.Inverse(Q1)*Q2

從Q2狀態旋轉回Q1狀態

Quaternion.Inverse((Quaternion.Inverse(Q1)*Q2))


Unity中旋轉物體時,世界座標依照zxy依次旋轉,旋轉次序不一樣的話會得到不同的結果。

旋轉方式:

transform.eulerAngles  += new Vector3(30,0,0);

transform.rotation *= Quaternion.Euler(30,0,0);
transform.rotation = Quaternion.Euler(30,0,0) * transform.rotation;
三種方式的結果可能是不同的:

第一種,把最終的旋轉結果直接賦值給物體,等同於在編輯器中直接改寫數值,並不是沿著X軸旋轉30°。

第二種,把物體沿著自身的X軸旋轉30°。

第三種,把物體沿著世界X軸旋轉30°。(localRotation則為根據父物體軸旋轉)

向量旋轉:

四元素*向量,是對向量Vector3進行旋轉。

幾何意義:在球面上的一個點的運動。

向量dot:

a·b=|a||b|·cosθ

幾何意義:向量a在向量b方向上的投影與向量b的模的乘積

應用:計算向量在另一個向量上的投影長度和夾角。(夾角從0-180,無法區分正負)

向量cross:

a×b=c,其中|c|=|a||b|·sinθ,c的方向遵守右手定則

幾何意義:c的模是垂直a、b所在平面,且以|b|·sinθ為高、|a|為底的平行四邊形的面積

應用:計算向量之間夾角時,用cross的值正負來判斷夾角是否大於180°


四元素*向量,是對向量Vector3進行旋轉,不能直接用於transform尤拉角的旋轉。 transform.rotation *= Quaternion.Euler(30,0,0); transform.rotation *= Quaternion.Euler(30,0,0); transform.rotation = Quaternion.Euler(30,0,0) * transform.rotation;