四元數與歐拉角關係

本文目錄一覽:

求兩個單位向量之間的歐拉角

如圖若a為一維向量,則由a變換到b旋轉兩次即可。

若a為非一維向量,則可以通過轉換變成一維向量。

所以說,應該通過兩次旋轉即可由a變換到b。

而兩次旋轉可以順序不同,所以這個不解是唯一的。

【僅供參考】

如何用Matlab實現四元數到歐拉角的轉換?(急需轉換的代碼)

MATLAB 2006b之後的版本提供了航空航天工具箱(Aerospace Toolbox),其中有quat2angle函數,就是用於實現四元數到歐拉角轉換的。

基本調用格式:

[r1r2r3]=quat2angle(q)

[r1r2r3]=quat2angle(q,s)

其中q為四元數,r1-r3為歐拉角,s為歐拉轉序(rotation sequence,有的資料譯成「順規」)。

說明幾點:

1、輸出的歐拉角單位是弧度;

2、歐拉角的定義有很多種,應用在不同的領域(有時用的名字,例如Tait-Bryan角)。確切點說,一共有12種定義——第一次旋轉可以繞任何一個坐標軸進行(3),第二、第三次旋轉要繞除上一次旋轉之外的另外兩個坐標軸(2×2),所以,一共可以有3x2x2=12種定義。quat2angle支持這全部12種定義,並以三次旋轉的坐標軸表示,例如'ZYX', 'ZYZ', 'ZXY',等等。默認的轉序是ZYX。

3、上面說的轉序涉及到坐標系的定義,該函數的坐標系定義為Z軸為豎軸,可能與某些領域的習慣不同,需要特別注意。

示例:

[yaw,pitch,roll]=quat2angle([1010])

yaw=

0

pitch=

1.5708

roll=

0

四元素轉歐拉角為什麼不可逆

二者可以相互轉換。

四元數的性質包括1、滿足結合律 2、不滿足交換律 3、乘積的模等於模的乘積 4、乘積的逆等於各個四元數的逆以相反的順序相乘。歐拉角的缺點包括1、 歐拉角的表示方式不唯一。給定某個起始朝向和目標朝向,即使給定yaw、pitch、roll的順序,也可以通過不同的角度組合來表示所需的旋轉。這其實主要是由於萬向鎖(Gimbal Lock)引起的;2、歐拉角的插值比較難;3、計算旋轉變換時,一般需要轉換成旋轉矩陣,這時候需要計算很多sin, cos,計算量較大。

由以上原因決定。

unity 四元數為什麼轉歐拉

四元數是一個比較複雜的數學知識。。為了讓開發者不需要懂太深奧的數學知識,也能操作角度。所以才有了歐拉角,只需要三個值就確定旋轉角度。。但其實旋轉的內部計算方式,是通過四元數實現的。。。

但用歐拉角操作旋轉角度,會產生一個問題,就是在特定情況下,會出現一種叫做「萬向節死鎖」的錯誤。。。為了避免這種錯誤產生,有時則需要先把歐拉角轉換成四元數,來進行旋轉。。等旋轉完成之後,再轉換回歐拉角。。

如果你會使用四元數,那就直接使用四元數就可以了。。。歐拉角是為像我這種數學知識比較差的人準備的。。。。

Unity基礎:歐拉角、四元數

在遊戲開發中,經常會接觸到旋轉,常用的旋轉方式有使用矩陣旋轉,使用歐拉角旋轉和使用四元數旋轉。在本篇中,主要研究歐拉角和四元數。

在Unity的Transform中,Rotation屬性對應的就是歐拉角,一共分為3個軸,x、y和z,而每一個數值對應的是繞對應的軸旋轉的度數。

如上圖所示,表示按照坐標順序旋轉,X軸旋轉30°,Y軸旋轉90°,Z軸旋轉10°。

但歐拉角會出現一個問題: 萬向鎖 。

什麼是萬向鎖?這個不好解釋,感覺只有真正遇到過的才會有所體會,有興趣的可以搜下萬向鎖的相關視頻感受下。

為什麼要使用四元數?

原因有很多,下面是其中的兩個我覺得比較重要的原因:

四元數比較複雜,是一個高級複數,跟二維複數能表示平面上的一個點類似,四元數表示的是思維空間上的一個點,由於是一個四維空間(所以不好想像),表示方式為:

![][1]

[1]:

其中:

![][2]

[2]: 2=j 2=k^2=-1

對一個點 p 的轉換公式為,p'為轉換後的點(至於具體的解釋,可以參考 candycat 前輩的 這篇博客 ):

![][3]

[3]: '=qpq ^{-1}

在四元數中,點 p 的四元數表示方式為

![][5]

[5]: ((x,y,z),0)

其中x,y,z為對應坐標,w量為0方便計算(其他數值也可以,不過轉換後結果不會有影響,我們只關注坐標量x,y,z)。

而旋轉點所需的四元數 q 的表示方式為:

![][4]

[4]: (cos \frac{\theta}{2},(x,y,z)sin\frac{\theta}{2})

其中 theta 為旋轉的角度,x,y,z為旋轉軸。

參考資料後,我的幾何理解是:一個點p要繞一個軸旋轉,如果用四元數進行變換,則要通過一個 輔助軸a ,軸a是原點與旋轉過程中的中間點構成的向量,通過兩次的四元數變換把點p變換到最終點p』(四維的量,不能單純地把xsin(theta/2),ysin(theta/2),zsin(theta/2)理解為歐拉角的x,y,z量)。

當然,四元數是可以通過歐拉角進行構建的:

通過軸-角構建:

當然還有其他方式,需要大家自行查詢官方文檔。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/240280.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:21
下一篇 2024-12-12 12:21

相關推薦

  • 依賴關係代碼的用法介紹

    依賴關係代碼在軟件開發中扮演着至關重要的角色。它們指定了項目中各個模塊之間的依賴關係。本文將從多個方面對依賴關係代碼進行詳細的闡述。 一、依賴關係代碼的作用 依賴關係代碼可以幫助開…

    編程 2025-04-28
  • Python實現天氣關係圖

    本文將介紹如何使用Python繪製天氣關係圖,通過分析和可視化天氣數據,幫助我們更好地了解天氣的變化和趨勢。 一、數據準備 首先我們需要從數據源中獲取天氣數據。我們可以使用爬蟲技術…

    編程 2025-04-27
  • Python和數學的關係

    Python是一門開源、高級、通用的編程語言,廣泛應用於科學計算、人工智能、數據分析等領域。而數學則是Python的一個重要應用領域。Python的簡潔、靈活的語法和龐大的數學庫,…

    編程 2025-04-27
  • 深入理解Docker容器和鏡像的關係

    一、Docker容器和鏡像的基本概念 Docker是一種虛擬化容器技術,它可以劃分出多個隔離環境,讓不同的應用程序在同一台機器上運行,而不會相互影響。Docker主要包含兩個基本概…

    編程 2025-04-24
  • 火星坐標系與wgs84關係

    一、火星坐標系簡介 火星坐標系(Mars Geodetic Datum)是指在地球外星球(例如火星)上建立的以該星球自轉軸為Z軸、過赤道與某子午線相交於X、Y軸的右手直角坐標系。而…

    編程 2025-04-24
  • 關係表達式的深度剖析

    一、關係表達式的定義 關係表達式是指在關係數據庫中為實現數據的最大效用和最快速度的數據檢索和存儲而定義的語法,表達式中的每一個元素(關係、屬性、常量等)均是數據庫的基本結構。 二、…

    編程 2025-04-23
  • JVM、JRE、JDK之間的關係

    一、JVM是什麼? JVM, 即Java Virtual Machine,是Java編程語言的核心,並且被實現為一個運行於實際機器和操作系統之上的虛擬計算機。它負責執行Java位元組…

    編程 2025-04-23
  • Git與GitHub的關係

    Git是一款開源分佈式版本控制系統,它最初由Linux的創始人Linus Torvalds開發,旨在用於管理Linux的代碼。而GitHub則是一個基於Git的在線代碼託管平台,用…

    編程 2025-04-22
  • TensorFlow版本對應關係詳解

    TensorFlow是一個廣泛使用的深度學習框架,但由於版本更新頻繁,不同版本間可能存在差異,因此在使用過程中需要了解版本對應關係。本文將從多個方面對TensorFlow版本對應關…

    編程 2025-04-22
  • 深入探究單位四元數

    單位四元數是一種旋轉表示方法,它被廣泛應用於計算機圖形學、機械人學、動畫製作等領域。在本文中,我們將從多個方面深入探究單位四元數,包括基本概念、構建方法、運算規則、旋轉應用等。 一…

    編程 2025-04-12

發表回復

登錄後才能評論