矩陣和向量的乘法順序


矩陣和向量的乘法順序

似乎經常有人被這個問題轉暈。向量有兩種表達形式,行向量和列向量,對應的矩陣也有行矩陣和列矩陣。采用哪種形式和左右手系無關。

行矩陣:
    三個軸向量為前三行,最后一行為位移變換
    連乘時從左到右接合,左邊的變換先應用
    變換向量時為vector * matrix
列矩陣:
    三個軸向量為前三列,最后一列為位移變換
    連乘時從右到左接合,右邊的變換先應用,注意這和*運算符的接合順序相反
    變換向量時為matrix * vector

DirectX采用了行矩陣,OpenGL采用了列矩陣,而基於OpenGL的OpenInventor卻采用了行矩陣。圖形學的書籍多使用列矩陣和列向量,或許是學術上的傳統,或許是節省版面的原因;而不少圖形庫選擇了行矩陣是因為行矩陣在現有的內存架構上效率要略高於列矩陣。另外,行矩陣的接合順序和*運算符是一致的,這一點非常適合運算符重載。

而四元數則不同,在數學上,四元數的乘法只有從右到左接合定義。DirectX里為了四元數也能和行矩陣的接合順序一致,也特意顛倒了四元數的乘法順序,使四元數也能符合*運算符的接合順序。WPF、XNA都采用了右手系、行矩陣,然而決定讓四元數恢復它的本來模式。如此,四元數必須獨立看待。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM