關於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;