計算機圖形學數學基礎譯自 scratchapixel **,數學基礎部分共八篇,本篇為第一篇,感興趣的同學可以參考我的 gitbook 映象。向量可以被看作是乙個箭頭從乙個點出發到另外乙個點結束。向量不僅可以看作為從a點到b點的方向,還可以看作a點到b點的距離。下列是計算向量長度的公式:
在幾何學中,復縱線(||v||)表示向量v的長度。向量長度通常被稱為模(norm)或大小(magnitude)。
在c++中可以表示為:
template class vec3
}
乙個 標準化的(normalised) 向量,是指乙個向量的長度為1。這種向量也被稱為單位向量(unit vector),標準化向量非常簡單,我們先計算出向量的長度,然後用向量在每個軸的座標乘以這個長度。公式為:
需要注意在c++**裡除法是可以優化的,首先計算向量的長度len,如果大於0,然後計算出長度len的倒數invlen
,最後用向量在每個軸上的座標乘以invlen
。這樣做的原因是程式設計中乘法的開銷要小於除法,尤其是在渲染(renderer)過程中,標準化向量極為常見,這個過程會有成百上千甚至百萬個向量。在這種級別,任何可能的優化都會直接影響渲染的時間。(需要支援有的編譯器會自動將乘法優化為除法)。
template class vec3
return *this;
}}
幾何學中常定義norm
函式來為向量的長度或距離賦值,這裡定義的函式被稱為歐幾里得範數(euclidean norm).
點積(dot product)或數積(scalar product),需要兩個向量a和b,可以被看作乙個向量在另乙個向量上的投影(projection)。點積的結果是乙個實數(float或double型別)。a和b的點積被記為:)。
點積由a向量的每個元素乘以b向量每個元素並求和。在3d的場景下,向量有三個係數(coefficients)或元素(elemment),即x,y和z。公式為:
需要指出的是這與我們計算向量長度的方法十分相似,如果我們取兩個相等向量(a=b)的點積的平方根
然後就可以得到向量的長度。可以寫做:
這可以被用於標準化方法:
templatet>
class vec3
vec3 & normalize()
return *this;
} ...
};
兩個向量的點積在3d程式中非常常見,因為點積的結果是兩個向量夾角的余弦值。
+ 如果b是單位向量,則
+ 當a和b都不是單位向量時,可以寫作
+ 當兩個向量都標準化後,通過計算點積的反余弦可以得到兩個向量的夾角:
(在幾何學中,acos()
).
點積在3d場景中用途非常廣泛:
+ 測試向量的正交性。當兩個向量(a,b)相互垂直時,a和b的點積為0,當兩個向量(a,c)為反方向時,a和c的點積為-1,當兩個向量(a,d)為相同方向時,a和d的點積為1.
+ 計算兩向量間的夾角或向量和座標軸之間的夾角(在座標軸轉化為球形座標時非常有用)。
叉積同樣是兩個向量的間操作,與點積不同的是,叉積返回的是乙個向量。由叉積產生的向量c垂直於產生叉積的向量a和b,如圖:
叉積的表達為:c = a x b
,為了計算叉積需要如下公式:
叉積產生的向量是垂直於產生叉積的兩個向量。向量a和b的叉積記為a x b
。兩個向量a和b決定乙個平面,叉積向量c垂直於這個平面。向量a和b不需要相互垂直,但是在a和b是單位向量時a,b,c可以形成笛卡爾座標系(cartesian coordinate system).這個特性在建立本地座標系時非常有用。
templatet>
class vec3
...};// or a utility function
templatet>
vec3 cross(const vec3 &a, const vec3 &b)
需要指出的是,向量a和b的順序會直接影響叉積的值,如a x b = (1,0,0) x (0,1,0) = (0,0,1)
而
b x a = (0,1,0) x (1,0,0) = (0,0,-1).
我們常說叉積是反交換率的(anticommutative),因為axb=c而bxa=-c。
在幾何學中,叉積的結果被稱為偽向量(pseudo vector),計算叉積的向量的順序可以直接影響曲面法線(su***ce normals)的方向。依據這個順序,叉積的結果可以是指向 曲面內部(inward-pointing normal) 或者 指向 外部(outward-pointing normal)。
數學基礎I 向量和座標
最基本的,我們都知道在數學上常常用座標表示空間中的某個目標點,該目標點在空間座標軸投影的位置即確定了目標點的位置。因此向量也可以用來表示描述這個目標點。什麼是向量?向量就是有大小,有方向的量。目標點相對於空間座標系原點的距離即是向量的大小,方位即是向量的方向。向量的基本運算有1 加減,2 範數和模,...
3D數學基礎 向量
vector3.h hello 注釋 是否需要const修飾就是分析其資料是否需要修改,不需要修改就加const,安全性 一般有兩個地方需要考慮是否加const 1,成員函式引數處 2,成員函式本身,即類本身資料不允許修改 修飾的是this ifndef hello vector3 h define...
數學基礎 向量運算(叉乘)
向量的叉乘,即求同時垂直兩個向量的向量,即c垂直於a,同時c垂直於b a與c的夾角為90 b與c的夾角為90 以上圖為例a 1,0,0 b 0,1,0 c a b 0,0,1 叉乘的幾何意義 c a b a b sin 為a,b向量之間的夾角 c a,b向量構成的平行四邊形的面積 如下圖所示的平行四...