VEX-----quaternion 四元數

2021-03-01 Houdini一千個技巧

      今天不想跑,所以才去跑,這才是長距離跑者的思維方式   

村上春樹

什麼是quaternion?

在3D程序中,通常用quaternion來計算3D物體的旋轉,可以把quaternion看做一個標量和一個3D向量的組合,在數學上,quaternion表示複數w+(xi+yj+zk),其中i,j,k都是虛數單位,實部w表示標量,虛部表示向量標記為V,或三個單獨的分量(x,y,z),所以quaternion可以記為[ w, V]或[ w,(x,y,x)]。對quaternion最大的誤解在於認為w表示旋轉角度,V表示旋轉軸。正確的理解應該是w與旋轉角度有關,v與旋轉軸有關。例如,要表示以向量N為軸,軸旋α度,相對的quaternion應該是:q =[ cos(α/ 2) , ( sina(α/ 2) Nx, sin(α/ 2)Ny, sin(α/ 2)Nz ) ]為了計算方便,一般要求N為單位矢量。對quaternion來說使用四個值就能記錄旋轉,而不是Matrix所需的十六個值。

quaternion和matrix有什麼不同?

與Matrix相比,quaternion更加高效,佔用的儲存空間更小,此外也更便於插值,quaternion是一個複數,複數乘法(叉乘)的幾何意義實際上就是對複數進行旋轉。對最簡單的複數p= x + yi來說,和另一個複數q = ( conα,sinα)相乘,則表示把p沿逆時針方向旋轉α:p』 = pq。當然,x+yi的形式只能表示2D變換,對3D變換來說就需要使用 quaternion了,而且計算也要複雜一點。為了對3D空間中的一個點p(x,y,z)進行旋轉,需要先把它轉換為quaternion形式p = [0, ( x, y, z)],接下來前面討論的內容,定義q = cos(α/ 2) , sin(α/ 2) N為旋轉quaternion,這裡N為單位矢量長度的旋轉軸,α為旋轉角度。那麼旋轉之後的點p』則為:p』 = qpq-1

什麼時候用quaternion,什麼時候用matrix?

如果能用quaternion就用quaternion,但是當不知道axis of rotation旋轉軸,不知道angle of rotation旋轉角度的時候,必須用matrix

quaternion的節點

euler_to_quaternion:使用給定的歐拉旋轉構建四元數

matx_to_quaternion:將矩陣轉換為四元數

quaternion:取一個角度和一個軸,並構造表示圍繞該軸的旋轉的四元數

quaternion_to_vec:輸出是四元數的組合角/軸,vec是圍繞旋轉的軸,長度是以弧度旋轉的量

quaternion_to_matx:將表示四元數的vector4轉換為表示相同旋轉的amatrix3值

rotate_by_quaternion:將提供的矢量根據四元數旋轉,由於輸入被視為向量,它是圍繞原點的旋轉

spherical_linear_interp:該運算符在兩個輸入的四元數之間計算球面線性插值,並輸出中間四元數,此插值將始終沿著最短的弧

vector_to_quaternion:輸入是角度/軸定義的旋轉,標準化版本形成圍繞旋轉的軸,長度是以弧度指定的旋轉的距離

quaternion和@orient屬性

輸出的四元數就是@orient屬性,如果點帶有這個@orient屬性,那麼copy的時候就會自動定向旋轉,一般輸出@orient的目的也就是為了copy的時候方便


相關焦點

  • 剛體運動變換的描述——四元數
    一、(Eigen)四元數類型常用的四元數格式有Quaternionf(float)和Quaterniond(double),模板類中的Scalar決定數據類型。四元數轉換Eigen::Quaterniond q7(1.0, 0.0, 0.0, 0.0);    q7.normalized();    // *注意,必須得是單位四元數才能表示旋轉矩陣    Eigen::Matrix3d R = q7.toRotationMatrix(); //由羅德裡格公式進行轉換    //Eigen::Matrix3d R = q7.
  • 四元數簡介
    簡單來說,四元數本質上是一種高階複數(聽不懂了吧。。。),是一個四維空間,相對於複數的二維空間。我們高中的時候應該都學過複數,一個複數由實部和虛部組成,即x = a + bi,i是虛數單位,如果你還記得的話應該知道i^2 = -1。而四元數其實和我們學到的這種是類似的,不同的是,它的虛部包含了三個虛數單位,i、j、k,即一個四元數可以表示為x = a + bi + cj + dk。
  • 學得淺碎不如無——四元數、矢量分析與線性代數關係剖析
    在第一次接觸到上述電-動力學公式列表的許多年後,筆者注意到此處的矢量只是矢量這個概念的特例 ai + bj + ck,乃是 ordinary quaternion world vector (普通四元數世界矢量),它和四元數這種特殊的超複數(hypercomplex number)有繼承關係,也和線性代數有內在的關聯。
  • 四元數與3D旋轉實例! Cocos Creator 3D Quternion !
    用幾個實用的例子帶你理解四元數!文末獲取完整項目!前言本文不會講太多四元數公式的推導過程,重點講講幾個接口的使用和個人理解。(矩陣基本沒有,歐拉角可以做插值,但可能遭遇萬向鎖的問題)當然四元數也有一些缺點:四元數可能不合法。(一般通過四元數標準化解決這個問題,確保四元數為單位四元數)對給定的方位的表達方式有兩種方法,它們相互為負。
  • 姿態表示方法之四元數
    之前講了姿態表示方法之歐拉角和姿態表示方法之方向餘弦矩陣現在講一下對於四元數的簡單通俗理解
  • 無人機理論(三):簡單搞定四元數
    所以為了解決這些問題,數學上想出了用四元數的形式來表徵姿態的方法。2 四元數由來四元數是由愛爾蘭數學家Hamilton發明的,是發明的不是發現的,數學上的很多東西跟物理不一樣,它不一定是事物的發展規律,它有時候就是數學家們憑空想像出來的東西,有可能這個東西誕生以後就沒有人再用過,也有可能過了很多年,有人發現這個理論可以解釋很多現象,或者這個理論可以用來分析很多無法用現有知識解釋的現象。
  • 人體結構與功能的四元數模型——人體設計是數學家的傑作嗎
    回顧數學發展史可以發現,代數學的真正革命是四元數的發明,為線性代數理論的發展鋪平了道路,引起了數學上的一系列變革,尤其是在向量分析的發展中起了重要作用,直接導出了向量分析。哈密爾頓本人對四元數給予了無限的希望,認為四元數能夠與微積分相媲美,成為物理學、力學等學科的重要工具。四元數對代數學發展的影響猶如日心說在天文學發展的影響,成為代數學的真正變革[15, 16]。
  • 「向量」的歷史(下):從「四元數」到向量分析
    而另一位「天才數學家」哈密頓則要幸運得多,他的「四元數」思想,儘管發現時並未在物理上取得重要應用,而且也沒有「擴張論」這樣的接近向量分析。但是因為「光環效應」,以及文章的易理解性,「四元數」立刻深受數學家們的熱愛,並得到了廣泛傳播,隨後在泰特、麥克斯韋等大家的努力下,「四元數」更是成為了力學、電磁學研究必不可少的工具,這都為向量分析的最終成型奠定了堅實基礎。
  • 三維旋轉:歐拉角、四元數、旋轉矩陣、軸角之間的轉換
    2 四元數(Quaternion)與旋轉矩陣2.1 四元數---->旋轉矩陣眾所周知的是,歐拉旋轉是有萬向節死鎖(Gimbal Lock)的問題的。幸好我們有四元數(Quaternion)這種數學工具可以避免這個情況。一般來說,我們都會用單位四元數 來表示旋轉,其中 。
  • 一文詳解四元數、歐拉角、旋轉矩陣、軸角如何相互轉換
    幸好我們有四元數(Quaternion)這種數學工具可以避免這個情況。一般來說,我們都會用單位四元數  來表示旋轉,其中  。那麼給定一個單位四元數,可以構造旋轉矩陣(column major)[1][4][8][14][15]:這個四元數構造的大概思路就是把四元數的旋轉操作寫成矩陣形式(註:給定一個用於旋轉的單位四元數  和被旋轉的三維向量  ,那麼要直接用四元數旋轉這個向量,則我們首先要構造一個純四元數  ,設旋轉後的向量為  ,旋轉後的向量構造的純四元數為  ,那麼  )。
  • 頭條 | 一文詳解四元數、歐拉角、旋轉矩陣、軸角如何相互轉換
    和被旋轉的三維向量  ,那麼要直接用四元數旋轉這個向量,則我們首先要構造一個純四元數 所以我們可以把四元數的四個分量都用矩陣元素湊出來了:有一點《Real Time Rendering》提到的, 參考維基百科[2]的思路,歐拉角構造四元數,跟歐拉角構造旋轉矩陣一樣,就是把三個基礎旋轉Elemental Rotation組合在一起。那麼用於旋轉的四元數
  • 學前班遊戲開發入門3:Unity3D中的旋轉與引出的四元數知識
    也不用自卑,數字家們也曾經頭痛過很長時間,據說解決這個問題的數字家是愛爾蘭的數學家Hamilton,他用到的解決方法就是我們這次要說的4元數。也不用害怕這個沒見過的"4元數",它的意思其實只是說一個數據用4個數字表示,也不一定就用來表示角度,只不過在這裡我們特指一個旋轉的3維空間下的參數用4個浮點來表示,也就是一個角度用4個數據才能表示出來,而我們以前學的幾何中則是用3個數據就表示出來了(分別指定 x,y,z 三個軸上要旋轉的角度就可以了)。
  • MEMS陀螺儀需組合其他傳感器使用 歐拉角和四元數表述飛行姿態
    MEMS陀螺儀需組合其他傳感器使用 歐拉角和四元數表述飛行姿態   至於MEMS陀螺儀是如何與其他傳感器配合使用實現平衡控制和輔助導航,金良詳細的向記者解釋道:「比如說,三軸加速度和三軸陀螺儀(角速度) 並發傳送給單片機或DSP處理,然後由單片機或DSP進行姿態解算(如四元數),求解出當前飛機的pitch、roll及yaw三個角度值,再根據這三個角度經過PID控制運算,輸出四路PWM控制四個電機(對四軸無人機而言)的加減速從而達到無人機的平衡懸停狀態
  • 四上數學除數是兩位數的筆算除法預習學案
    ,就除被除數的前兩位;除到被除數的哪一位就把商寫在那一位的上面;每次商後餘下的數必須要比除數小。1、除數是整十數的筆算乘法。(1)整十數除兩位數的筆算92本連環畫,每班30本,可以分給幾個班?92÷30=3(個)……2(本)總結:整十數除兩位數的筆算方法:被除數裡面有幾個除數,商就是幾,所以商寫在個位上,餘數要比除數小。
  • 被遺忘百年的數系,能否揭開宇宙維度之謎
    哈密頓的山窮水復在1843年10月16日到來,這一天他與妻子沿著都柏林的皇家運河散步,準備去愛爾蘭皇家科學院參加會議,突然之間他靈光一現,要描述三維空間中的轉動,僅用三個數是不夠的,他還需要第四個數,這樣形成一個四維的集合,其中的元素都形如a + bi + cj + dk,稱為四元數(quaternion),其中i,j,k表示三個獨立的
  • 四年級上冊除數是兩位數的除法應用題,附答案
    四年級上冊除數是兩位數的除法應用題,附答案參考答案:1、劉師傅23天共加工4255個零件,王師傅平均每天比劉師傅多加工15個。王師傅每天加工零件多少個?解題思路:已知劉師傅23天工加工4255個零件,所以劉師傅平均每天加工的零件數就可以先求出來,即4255÷23=185(個)。王師傅平均每天比劉師傅多加工15個,所以王師傅每天加工的零件數為,185+15=200(個)。參考答案:4255÷23+15=200(個)。答:王師傅每天加工零件200個。2、湖濱公園有18條遊船,每天收入1008元。