3D遊戲引擎數學基礎3 向量(下篇)

2021-07-11 14:27:58 字數 2031 閱讀 7193

向量數乘

標量可以與向量相乘,可以直觀聯想到,該運算可以對向量進行縮放。該運算不改變向量的方向,除非標量是負數,這樣向量的方向與原來的方向相反。

k *u= (k * ux, k * uy, k * uz)

在unity引擎中有對物體進行縮放的功能,其提供在三個座標軸上的縮放,其底層的運算估計就是向量數乘。

於是,有需要過載一下乘法操作符了。

向量點乘

點乘是向量代數所定義的兩種乘法之一,其運算規則如下

u·v= ux * vx + uy * vy + uz * vz

上述公式並不具有明顯的幾何意義。但由餘弦定理,可以發現u·v= |u| * |v| * cosθ,即兩個向量的點乘等於兩者夾角的余弦乘以兩個向量的模的乘積。由此可知,如果uv都是單位向量,則u·v就等於uv夾角的余弦。

根據這個規則,點乘有一些有用的性質:

1、若u·v= 0, 則uvuv垂直)

2、若u·v> 0, 則兩向量之間的夾角小於90°

3、若u·v< 0,則兩向量之間的夾角大於90°

然後,我們需要乙個計算點乘的函式。

向量叉乘

向量代數所定義的第二種乘法為叉乘。與點乘不同(結果為乙個標量),叉乘的結果是另乙個向量。運算所得的向量puv彼此正交,也就是說pu正交, 也與v正交。叉乘的運算規則如下:

p=uxv= [(uy*vz - uz*vy), (uz*vx - ux*vz), (ux*vy - uy*vx)]

看著眼暈,其分量形式為:

px = (uy*vz - uz* vy)

py = (uz*vx - ux*vz)

pz = (ux*vy - uy*vx)

來張圖有個具體的概念:

從圖上可以看到,叉乘後的方向是向上的,那麼是什麼決定了這向上的方向呢?答案是:座標系和叉乘順序。由於我們採用左手座標系,所以我們使用左手法則來判斷叉乘結果的方向。左手手指沿著第乙個向量向第二個向量彎曲,拇指的指向就是這兩個向量叉乘結果的方向。(如果是右手座標系,則用右手法則來判斷。)另外,叉乘並不滿足交換律,uxv!=vxu,因此,在做計算的時候需要對這點留一下心。不過,如果做多了,這也就是乙個本能,並不需要去思考的事情。

ok。叉乘運算也需要加到引擎中去。

至此,向量部分的數學知識已經回顧完畢,接下來就要說到矩陣了,嗯,也是必備知識之一。

由於筆者水平有限,博文中難免會出現疏漏,歡迎讀者批評指正。

3D數學基礎 向量

vector3.h hello 注釋 是否需要const修飾就是分析其資料是否需要修改,不需要修改就加const,安全性 一般有兩個地方需要考慮是否加const 1,成員函式引數處 2,成員函式本身,即類本身資料不允許修改 修飾的是this ifndef hello vector3 h define...

3D遊戲的數學基礎

第1章 向量 1.1 向量的性質 1.2 點積 1.3 叉積 1.4 向量空間 1.5 本章小結 習題第2章 矩陣 2.1 矩陣的性質 2.2 線性方程組 2.3 逆矩陣 2.4 行列式 2.5 特徵值與特徵向量 2.6 對角化 2.7 本章小結 習題第3章 變換 3.1 通用變換 3.1.1 正交...

3D遊戲的數學基礎

第1章 向量 1.1 向量的性質 1.2 點積 1.3 叉積 1.4 向量空間 1.5 本章小結 習題第2章 矩陣 2.1 矩陣的性質 2.2 線性方程組 2.3 逆矩陣 2.4 行列式 2.5 特徵值與特徵向量 2.6 對角化 2.7 本章小結 習題第3章 變換 3.1 通用變換 3.1.1 正交...