線性代數及三維旋轉矩陣(與3D和WebGL相關)

2021-08-27 19:56:16 字數 1758 閱讀 2014

1.基本概念:

webgl中使用三維/正交/右手座標系

三維:三個座標軸(x軸/y軸/z軸)

正交:兩兩垂直

右手:x軸拇指正方向/y軸食指正方向/z軸無名指正方向

3d座標系中原點的位置:(vx, vy, vz)=(0, 0, 0)

標量:有大小無方向(如:溫度/質量/能量)

向量:有大小有方向(如:力/加速度/速度)

向量相加/向量相減

向量乘以標量等於乙個新的向量:kv = (kvx + kvy + kvz)

v = (vx, vy, vz)

如果k為-1,則得到乙個與原向量大小相等/方向相反的新向量

3d空間中兩個向量相乘有兩種方式:

點積/標積(scalar product)

叉積(cross product)

點積定義: u.v = |u||v|cos@

代數形式: u.v = uxvx + uyvy + uzvz (x/y/z兩兩相乘之和)

叉積定義: w = u x v

代數定義: w = u x v = (uyvz - uzvy, uzvx - uxvz, uxvy - uyvx)

叉乘的結果是乙個新向量,這個新向量具有以下屬性:

|w| = |u||v|sin@

w正交與u和v

w與u和v符合右手定則

叉積不滿足交換律,但有以下關係:

u x v = -v x u

2.齊次座標:

齊次座標:p = (px, py, pz, pw)

對於向量,w = 0;當w # 0時,則齊次座標指定乙個點。

引進齊次座標有什麼必要,它有什麼優點呢?

答:許多圖形應用涉及到幾何變換,主要包括平移、旋轉、縮放。

以矩陣表示式來計算這些變換時,平移是矩陣相加,旋轉和縮放則是矩陣相乘

綜合起來可以表示為p' = p*m1 + m2(m1旋轉縮放矩陣, m2為平移矩陣, p為原向量 ,p'為變換後的向量)。

引入齊次座標的目的主要是合併矩陣運算中的乘法和加法,表示為p' = p*m的形式。

即它提供了用矩陣運算把二維、三維甚至高維空間中的乙個點集從乙個座標系變換到另乙個座標系的有效方法。

3.矩陣:

在webgl中,最常用的是4x4的矩陣:

只有乙個列的矩陣叫列向量:

只有乙個行的矩陣叫行向量:

行數和列數都相等的兩個矩陣才可以相加或相減(兩個m×n矩陣a和b的和,標記為a+b,一樣是個m×n矩陣,其內的各元素為其相對應元素相加後的值。)

只有當矩陣a的列數等於矩陣b的行數時,矩陣a才可以乘以矩陣b:

[m x p][p x n] = [m x n]

方陣:列數和行數相等的矩陣稱為方陣

單位矩陣:對角位置的元素為1,其他位置的元素為0,這樣的方陣稱為單位矩陣(通常用i表示,與標量1相對應)

矩陣m乘以它的逆矩陣,結果為單位矩陣

只有方陣才有逆矩陣,但不是所有的方陣都有逆矩陣

三維旋轉矩陣 旋轉之一 複數與2D旋轉

先複習一下複數 複數可以看做 這組基 basis 的線性組合 linear combination 所以可以用向量來表示複數。當然也就可以用復平面上的點來表示複數 複數的乘法 可以把它看做乙個矩陣和乙個向量相乘 所以複數也可以看成矩陣 把 也換成對應的矩陣 這也足以證明複數看成矩陣是正確的,所以複數...

三維旋轉矩陣 左乘和右乘分析

突然發現自己被旋轉矩陣的左乘右乘給搞糊塗了,查了不少部落格還是有點暈,這裡自己總結一下 本文所討論均是基於右手座標系,旋轉也是以正方向旋轉,如圖所示 左乘 座標繫不動,點動,則左乘。若繞靜座標系 世界座標系 旋轉,則左乘,也是變換矩陣乘座標矩陣 右乘 點不動,座標系動,則右乘。若是繞動座標系旋轉 自...

3D三維開發 常用方案和框架

3d 引擎是3d圖形函式庫。3d引擎,將現實物體,轉變為多邊形或曲線。常見影象函式庫 directx 只能在windows上 opengl,這個多種系統上執行。opengl es是針對android的版本。android上常見,3d引擎,大多基於opengl es技術開發。kanzi ui solu...