日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity-数学2-四元数

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity-数学2-四元数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

Quaternion.Angle? :?返回a和b兩者之間的角度

? ??聲明形式:public static float Angle ( Quaternion a,? Quaternion b )

? ??它可以計算兩個旋轉之間的夾角。與Vector3.Angle()作用是一樣的。

Quaternion.Euler? :??返回一個旋轉角度,繞z軸旋轉z度,繞x軸旋轉x度,繞y軸旋轉y

? ??聲明形式:public static Quaternion Euler ( Vector3 euler )

? ? 這個函數可以將一個歐拉形式的旋轉轉換成四元數形式的旋轉。傳入的參數分別是歐拉軸上的轉動角度。

Quaternion.Slerp? :??球形插值,通過t值from向to間插值。

???聲明形式:public static Quaternion Slerp ( Quaternion from, Quaternion to, float t )

? ??基本意思就是線性地從一個角度旋轉到另一個角度,其中旋轉勻速增加t

??? 附加內容:很多時候from 和to都不是固定的,而且上一個腳本也不能保證所有角度下的旋轉速度一致。

? ?所以我寫了這個腳本來保證可以應付大多數情況。

Transform target; float rotateSpeed = 30.0f; Quaternion wantedRotation = Quaternion.FromToRotation(transform.position, target.position); float t = rotateSpeed/Quaternion.Angle(transform.rotation, wantedRotation) * Time.deltaTime; transform.rotation = Quaternion.Slerp(transform.rotation, target.rotation, t);

? ? 這個腳本可以保證物體的旋轉速度永遠是rotateSpeed

?? 如果自身坐標和目標之間的夾角是X度,我們想以s=30度每秒的速度旋轉到目標的方向,則每秒旋轉的角度的比例為s/X?

? ??再乘以每次旋轉的時間Time.deltaTime們就得到了用來勻速旋轉的t?

Quaternion.FromToRotation :?從fromDirection到toDirection創建一個旋轉。

?? 聲明形式:public static Quaternion FromToRotation ( Vector3 from, Vector3 to )

? ? 它是得到從一個方向到另一個方向的旋轉。就是轉一個方向,就這么簡單。

Quaternion.identity?? ? :?返回恒等式旋轉(只讀)。這個四元數對于無旋轉:這個物體完全對齊于世界或父軸.

Quaternion.operator * :?由另一個四元數來旋轉一個旋轉角度,或由一個旋轉角度來旋轉一個向量.?(x,y,z) :?跟旋轉軸有關,? w? :?繞旋轉軸旋轉的角度有關.

Quaternion.LookRotation: ( Vector3 forward,? Vector3 upwards = Vector3.up)

?因為它們都要經過代數運算才能得出旋轉軸和旋轉角度? ?

?傳入的兩個參數分別代表前方盯著的方向以及自己的上方向。它可以讓一個GameObject轉動腦袋盯著另一個物體。如:

public Transform target;void Update(){Vector3 relativePos = target.position - transform.position;Quaternion rotation = Quaternion.LookRotation(relativePos);transform.rotation = rotation;}

這段代碼就可以讓當前的object時時盯著target不放,當然,你也可以自定義up朝向,這里默認是Vector3.up;

?

詳解Quaternion類:??http://www.cnblogs.com/tgycoder/p/5106463.html?

?

unity3d, quaternion?的乘法操作?(operator? * )?有兩種操作:

?? (1) quaternion * quaternion???例如?q = t * p;??這是將一個點先進行t?操作旋,?然后進行p操作旋.

?? (2) Quaternion * Vector3,?? ? ??例如?p : Vector3;? t : Quaternion;? q : Quaternion;?? q = t * p;???這是將點p?進性t?操作旋

?

Quaternion基本數學方程 :?

Q =? i (x * sin(angle/2)) + j (y * sin(angle/2)) + k(z * sin(angle/2)) + cos (angle/2)? (angle?為旋轉角度)

==============================

Q.x? = axis.x * sin (angle / 2)?

Q.y? = axis.y * sin (angle / 2)??

Q.z? = axis.z * sin (angle / 2)

Q.w = cos (angle / 2)?

==============================

只要有角度就可以給出四元數的四個部分值??

例如我想要讓點 M = Vector3(o, p, q)?繞x軸順時針旋轉90

對應的quaternion值就應該為:

Q : Quaternion;

Q.x = 1 * sin(90度/2) = sin(45度) = 0.7071

Q.y = 0;

Q.z = 0;

Q.w = cos(90度/2) = cos (45度)? = 0.7071

Q = (0.7071, 0 , 0 , 0.7071);

m = Q * m;?(將點m?繞 x軸(1, 0, 0)?順時針旋轉了90度).

這是quaternion?的最基本用法,主要給出角度,就可以算出Quaternion,然后對點坐標進行旋轉.

—————————————————————————————————————————

1World Space(世界坐標):?

我們在場景中添加物體(如:Cube),他們都是以世界坐標顯示在場景中的

transform.position?可以獲得該位置坐標。?

?

2Screen Space(屏幕坐標):?

以像素來定義的,以屏幕的左下角為(0,0)點,右上角為(Screen.width,Screen.height

Z的位置是以相機的世界單位來衡量的。?

Screen.width? = Camera.pixelWidth?

Screen.height = Camera.pixelHeigth?

標位置坐標屬于屏幕坐標,Input.mousePosition可以獲得該位置坐標,?

手指觸摸屏幕也為屏幕坐標,Input.GetTouch(0).position可以獲得單個手指觸摸屏幕坐標。?

?

3ViewPort Space視口坐標):?

視口坐標是標準的和相對于相機的。相機的左下角為(00)點,右上角為(11)點

Z的位置是以相機的世界單位來衡量的。?

?

4繪制GUI界面的坐標系:?

這個坐標系與屏幕坐標系相似,不同的是該坐標系以屏幕的左上角為(00)點,右下角為(Screen.widthScreen.height

—————————————————————————————————————————

【四種坐標系的轉換】?

1、世界坐標→屏幕坐標:?

camera.WorldToScreenPoint(transform.position);?

將世界坐標轉換為屏幕坐標。其中camera為場景中的camera對象。?

2、屏幕坐標→視口坐標:?

camera.ScreenToViewportPoint(Input.GetTouch(0).position);?

將屏幕坐標轉換為視口坐標。其中camera為場景中的camera對象。?

3視口坐標→屏幕坐標:?

camera.ViewportToScreenPoint();?

4視口坐標→世界坐標:?

camera.ViewportToWorldPoint();

?

轉載于:https://www.cnblogs.com/liusj/p/8026623.html

總結

以上是生活随笔為你收集整理的Unity-数学2-四元数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。