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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

关于旋转(Rotation)

發布時間:2024/5/24 综合教程 44 生活家
生活随笔 收集整理的這篇文章主要介紹了 关于旋转(Rotation) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于旋轉(Rotation)

很多萌新在接觸計算機圖形學的時候,不明白為啥要用四元數來表示旋轉角度,那這篇文章主要從比較各大旋轉角度,在比較中突出四元數的優點和實用。

在計算機圖形學中,一個物體的位置很容易確定,直接拿到position就可以準確地定位物品的位置,但是其方向(orientation)是一個值得探討的話題。那么通過旋轉角度來可以定義兩兩orientation之間的改變。“朝向”是狀態,“旋轉”是操作。

關于旋轉這個話題,接下來分成三個步驟,由淺入深地來討論:

1,旋轉矩陣

假設當前的朝向方向是 (x, y, z) 那么旋轉可以由旋轉矩陣得到:

沿著X軸旋轉:


沿著y軸旋轉:

沿著z軸旋轉:

先沿著X軸轉動然后在沿著Y軸轉動,很可能就會導致一個問題萬向節死鎖問題(Gimbal Lock)

  補充: 出現Gimbal Lock的本質原因在于:當第二次旋轉角度為90度時,第三個軸和第一個軸轉到了同個方向,因此缺少了一個自由度,導致了運動空間的限制。

取代上面方案的是沿著任意軸進行旋轉特定的角度

但這種方法也是不能完全解決萬向節死鎖問題

2,歐拉角

針對上面的旋轉問題,旋轉數據量大,且存在問題,那使用歐拉角可以使用vec3來存儲一個歐拉角

Vec3 EulerAngles(RotationX, RotationY, RotationZ);

歐拉角可以分為三個部分,俯仰角:圍繞x軸的pitch,偏航角:圍繞y軸的yaw,滾轉角:圍繞z軸的roll,

使用歐拉角可以表示任何種類的旋轉角度。但是仍存在著一個歐拉角的問題:

對兩個朝向進行插值比較難,簡單對x,y,z簡單插值得到結果不理想;

實施多次旋轉很復雜且不準確,必須計算出最終的旋轉矩陣,然后據此推測歐拉角

不同角度可產生同樣的旋轉;

針對有些操作會很復雜;如繞指定的軸旋轉N角度。

3,四元數,表示旋轉的好工具。

四元數是由4個數[x, y, z, w]構成,表示了如下的旋轉

x = RotationAxis.x * sin(RotationAngle / 2)

y = RotationAxis.y * sin(RotationAngle / 2)

z = RotationAxis.z * sin(RotationAngle / 2)

w = cos(RotationAngle / 2)

其中 RotationAxis 旋轉軸,RotationAngle 旋轉的角度。

這樣四元數中實際上存儲了一個旋轉軸和一個旋轉角度。其中xyz分別代表了各個軸上的旋轉分量。

其中[0, 0, 0, 1]表示單位四元數 (unit quaternion),表示沒有旋轉。

3. (1)如何從兩個方向向量得到旋轉角度:

      r = v1 X v2 是旋轉軸

      O = acos(v1 * v2) 是旋轉角度

    然后帶入上面的公式即可。

3.(2)如果先轉動了q1,再轉動了q2, 那么結果轉動了q’= q2 * q1。

3.(3)

四元數(quaternion)的好處是:使用角度和坐標軸的表示方法來防止了Gimbal lock的出現;避免了旋轉矩陣的運算量和數據量;可以很容易的插值操作

總結

以上是生活随笔為你收集整理的关于旋转(Rotation)的全部內容,希望文章能夠幫你解決所遇到的問題。

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