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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

方形物体绕中心旋转的扭力_三维旋转

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 方形物体绕中心旋转的扭力_三维旋转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
chopper:目錄?zhuanlan.zhihu.com

本篇文章主要介紹三維空間下旋轉的三種表示形式:四元數、矩陣和歐拉角,闡述了三種旋轉表示的數學原理并且對比了它們的優缺點。目錄結構:

  • 四元數
  • 旋轉矩陣
  • 歐拉角
  • 參考

1. 四元數

四元數(Quaternion)是由愛爾蘭數學家威廉?盧云?哈密頓在1843年發現的數學概念,在圖形學中有重要的應用。在3D程序中,通常用四元數來計算3D物體的旋轉角度,與矩陣相比,四元數更加高效,占用的儲存空間更小,此外也更便于插值。

任意一個四元數可以表示為:

其中,

,注意,但是。四元數的長度(模長)表示為,通常將四元數規一化(Normalized),即:

四元數本質上是復數(Complex Number),復數就存在一個共軛的概念。若兩個復數的實部相等,虛部互為相反數,則稱這兩個復數互為共軛(Conjugate),

的共軛復數表示為:

四元數間的運算,遵循復數間運算法則。

加減法:

與系數的乘積:

點積:

四元數點積與向量點積相似,也可以計算四元數之間的角度差,即:

四元數間的乘積不遵守交換律,表示為:

等式展開得:

其中,

任意一個四元數可以分解為向量和標量兩部分,即

,則兩個四元數的乘積有下列等式成立,具體的推導參見[2][3]:

根據歐拉旋轉定理,任何坐標系的相對定向,可以用四個數來規定。四元數原理的核心也在于:三維空間內,所有的旋轉都可以用四個數來表示。通過四元數來計算旋轉,它能減少所需的工作,并減小舍入誤差。在電腦圖形學里,四元數的插值計算是很簡單的,這有非常重要的應用價值。

圖1. 繞著指定軸的旋轉[1]

在三維空間上,物體繞著任意一條軸旋轉

度,任意一個繞著指定點的旋轉都可以表示成繞著經過該點的軸的旋轉,如圖1所示,考慮繞著點的旋轉,任意一個點經過旋轉變換后,得到新的點。用四元數表示繞著軸旋轉角度的旋轉:

其中,

相反,給定一個四元數

,可以計算出它表示的旋轉軸和角度,如下所示:

其中,若

,則表示繞著任意坐標軸旋轉度。

假設存在一個向量

和一個四元數,四元數可以表示一個旋轉,把向量進行旋轉變換,得到新向量,可以表示為:

把等式(10)代入等式(13),且由拉格朗日公式

,上式可以簡化為:

若對向量

進行四元數表示的旋轉的逆變換,得到新向量,可以表示為:

可以簡化為:

圖2. 線性插值

最后,介紹下四元數的球面插值。以線性插值為例,如圖2所示,在兩個向量

之間插值,得到等式,線性插值存在一個缺點是,在以為半徑的圓的曲線軌跡上不是恒速變化的。

圖3. 球面插值

四元數的球面插值(Spherical Linear Interpolation)仍然只用于表示旋轉,它是關于單位四元數構成的球表面上的操作。如圖3所示,作輔助線,經過點

作一條平行于的直線,相交于點;經過點作一條直線垂直于,并交于點; 經過點,作一條直線平行于,與交于點。易知,,則易知,即有:

同理,可以計算出:

四元數的球面插值可以表示為:

四元數廣泛的應用在3D游戲動作的旋轉表示,四元數表示旋轉不直觀,但是更健壯、更高效。四元數只有4個值,矩陣有9個,花費更少的空間和時間。當使用浮點數對矩陣進行大量的操作,浮點數的誤差就會不斷累積到矩陣,誤差的累積會使得旋轉的計算發生錯誤,四元數的計算更少,誤差也會相應的更少,也不會出現歐拉角中出現的萬向節死鎖。

2. 旋轉矩陣

在二維空間上,繞著原點,沿著逆時針方向旋轉

角,可以用的矩陣表示為:

在三維空間上,繞著

軸、軸、軸的旋轉分別用的矩陣表示,有

其中,沿著坐標軸相反的方向觀察,

表示逆時針旋轉的角度。

如果希望三維空間上的物體能繞著

軸旋轉度,旋轉中心的齊次表示為,那么該如何進行變換呢[1]?由于采用矩陣形式的變換,可以用矩陣的乘積來疊加。首先,應該進行平移變換,使點與原點重合,這一過程可以用表示;然后,進行旋轉變換;最后,再進行位移變換,返回至物體原先坐標。總的變換矩陣用表示,則可以用表示變換后的點,為:

在三維空間上,物體繞著任意一條軸旋轉

度可以用的旋轉矩陣表示[1]。任意一個繞著指定點的旋轉都可以表示成繞著經過該點的軸的旋轉,如圖1所示,考慮繞著點的旋轉,任意一個點經過旋轉變換后,得到新的點。我們可以把這樣的旋轉分解為幾個步驟:
  • i. 把軸進行兩次旋轉變換,即和,使得軸與軸方向相同;
  • ii. 繞著軸旋轉度,即;
  • iii. 與第i步相反的旋轉變換,使得軸恢復到最初方向。

組合上述5個旋轉變換,總的變換可以表示為

把等式(21)中的變換等式代入(23)中,可以得到總的變換等式

其中,

相反,若給定一個旋轉矩陣

,我們也可以求出它是繞著哪條坐標軸旋轉多少度角?設

由等式(24),可以計算出旋轉的角度為

三個方向的分量為

旋轉矩陣

有三個重要的性質:
  • i.
  • ii.
  • iii.

單位四元數

,可以用矩陣形式表示為:

旋轉矩陣在圖形渲染中占據著非常重要的作用,它支持傳遞性,使用起來很簡單方便,但是不直觀,比較浪費內存,至少需要12個參數矩陣插值的實現難度很大。

3. 歐拉角

歐拉角是用于描述剛體在三維空間的朝向,它是相對于指定參考坐標系的旋轉,一個剛體的朝向,依賴于參考坐標系,按一定順序,做出的三個歐拉角的旋轉而構成的。

歐拉角包括3個旋轉,根據這3個旋轉來指定一個剛體的朝向。這3個旋轉分別繞x軸,y軸和z軸,分別稱為Pitch,Yaw和Roll,如圖4所示。歐拉角可以表示成z-x-z,x-y-x,z-y-z等形式,旋轉的順序影響結果。

Pitch

Yaw

Roll

歐拉角很重要的一個優點就是直觀,容易理解,但是也存在一些致命的缺點。旋轉的順序會影響旋轉的結果,不同的應用又可能使用不同的旋轉順序,旋轉順序無法統一。3個旋轉的角度可以不受限制,即可以是10000度,也可以是-1500度。還可能造成萬向節死鎖(Gimbal Lock)。

如圖5所示,當兩個環發生重疊的時候,就會丟失了一個自由度,也正是由于鎖的存在,無法使用歐拉角實現球面平滑的插值。萬向節死鎖可以參考[6]提供的視頻,對知識點的介紹非常的形象生動。

圖5. 萬向節死鎖

參考

[1] F. Hill, and S. Kelley. Computer Graphics Using OpenGL, 3/E, Pearson, 2007.

[2] WIKIPEDIA. “Quaternions and spatial rotation. website<https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation>

[3] WIKIPEDIA. “Quaternions.” website< https://en.wikipedia.org/wiki/Quaternion>.

[4] WIKIPEDIA. “Euler angles.” website< https://en.wikipedia.org/wiki/Euler_angles>.

[5] Fletcher Dunn and Ian Parberry. 3D math primer for graphics and game development. CRC Press, 2015.

[6] Youku, “歐拉旋轉.”, website<https://v.youku.com/v_show/id_XNzkyOTIyMTI=.html>.

總結

以上是生活随笔為你收集整理的方形物体绕中心旋转的扭力_三维旋转的全部內容,希望文章能夠幫你解決所遇到的問題。

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