3D數(shù)學(xué)基礎(chǔ) 簡要?dú)w納
- 計(jì)算機(jī)圖形學(xué)第一準(zhǔn)則:看上去是對的就是對的断序,簡單記為
近似原則
- OpenGL是基于3D的铃绒,屏幕是2D的
- OpenGL中使用的是列向量
左手系&右手系
- OpenGL更多的是基于左手系
- 線性代數(shù)更多是基于右手系
- 3D圖形學(xué)中常用坐標(biāo)系
- 世界坐標(biāo)系:系統(tǒng)的絕對坐標(biāo)系
- 物體坐標(biāo)系:物體產(chǎn)生關(guān)聯(lián)
- 攝像機(jī)坐標(biāo)系/照相機(jī)坐標(biāo)系
- 慣性坐標(biāo)系:物體坐標(biāo)系轉(zhuǎn)換為世界坐標(biāo)系的 “半途”,目的是為了減少復(fù)雜度潭兽,是一個(gè)過渡
- eg:以下情景基于什么坐標(biāo)系褒侧?
- 書在我的
西邊
還是北邊
?==> 東南西北 -- 世界坐標(biāo)系 - 計(jì)算機(jī)在我的
前面
還是后面
嗡载?==> 上下左右 -- 物體坐標(biāo)系 - 從一個(gè)房間移動到另一個(gè)房間 ==> 尋路型 -- 世界坐標(biāo)系
- 你能
看見
我的計(jì)算機(jī)嗎? ==> 攝像機(jī)坐標(biāo)系
- 書在我的
向量
存儲 -- 數(shù)組
-
圖形學(xué)中:最多到4維
- 2D:x铸史、y
- 3D:x鼻疮、y怯伊、z
- 4D:x琳轿、y、z耿芹、w
零向量:沒有方向崭篡,沒有長度 即 模 = 0
-
負(fù)向量 = (-1).向量, 將向量中的每個(gè)數(shù)都乘以 -1
- 幾何意義:得到一個(gè)與原向量
大小相等,方向相反
的向量
- 幾何意義:得到一個(gè)與原向量
-
向量大小計(jì)算 即 模的計(jì)算 = 向量中所有數(shù)的平方和吧秕,再求根號
-
2D向量幾何意義:直角三角形最長邊的邊長
-
-
標(biāo)量與向量的運(yùn)算
總結(jié)- 標(biāo)量不能與向量進(jìn)行加減運(yùn)算
- 標(biāo)量與向量可以相乘琉闪,且滿足交換律,不需要寫乘號
- 向量可以除以標(biāo)量砸彬,即相當(dāng)于向量乘以一個(gè)標(biāo)量的倒數(shù) 即
v(向量)/k = v 乘以 1/k
- 標(biāo)量與向量的乘除 優(yōu)先級高于 加減
- 標(biāo)量不能除以向量颠毙,且向量不能除以另一個(gè)向量
- 乘法的特殊情況:負(fù)向量斯入,即
向量 乘以 標(biāo)量-1
- 幾何意義:
以因子(k 即 標(biāo)量)縮放向量的長度
,如果k<0, 向量的方向就會相反- 當(dāng)k = -1時(shí)蛀蜜,向量僅翻轉(zhuǎn)刻两,得到
大小相等,方向相反
的向量 - 當(dāng)k = -2時(shí)滴某,向量是先翻轉(zhuǎn)磅摹,再放大,即-2可以看成(-1)乘以2
- 當(dāng)k = -1時(shí)蛀蜜,向量僅翻轉(zhuǎn)刻两,得到
-
向量標(biāo)準(zhǔn)化
向量標(biāo)準(zhǔn)化 = 向量 / 向量的模霎奢,且向量 != 0
- 標(biāo)準(zhǔn)化向量 :是
向量長度 = 1
户誓,不等于單位向量,單位向量是主對角線數(shù)為1幕侠,其他全為0帝美,單位向量是標(biāo)準(zhǔn)化向量
-
向量的加減
總結(jié)- 向量不能與標(biāo)量或者維度不同的向量相加減
- 向量加法滿足交換律
- 向量減法不滿足交換律,只有當(dāng) a=b 時(shí)晤硕, a-b = b-a
- 向量加法幾何意義:平移向量
-
向量的
距離公式
- 向量a與向量b的距離公式 =
||b-a|| = b與a對應(yīng)位置數(shù)差的平方和证舟,再求根號
- 幾何意義:兩點(diǎn)間的距離
- 向量a與向量b的距離公式 =
-
向量的
點(diǎn)乘
總結(jié)
- 滿足交換律,因?yàn)辄c(diǎn)乘結(jié)果是一個(gè)標(biāo)量
- 幾何意義:兩向量的夾角窗骑,即
a · b = |a||b|cosα
==> α = arccos(a·b / |a||b|)女责,當(dāng)a、b是單位向量時(shí)创译,α = arccos(a·b)
a·b | 夾角α | a和b |
---|---|---|
> 0 | (0°抵知,90°) | 方向基本相同 |
= 0 | 90° | 正交 |
<0 | (90°,108°) | 方向基本相反 |
-
根據(jù)已知的向量v和向量n软族,且v2平行于n刷喜,v1垂直于n,求向量v2和向量v1
- v2平行于n:
v2 = n(|v2| / |n|)
-
cosα = |v2| / |v|
==>|v2| = cosα·|v|
- 將|v2|代入v2 ==>
v2 = n(cosα·|v| / |n|)
- 分子分母同時(shí)乘以
|n|
==>v2 = n(cosα·|v|·|n| / |n|2)
- 根據(jù)
a · b = |a||b|cosα
==>v2 = n(v·n / |n|2)
立砸,此時(shí)求得v2 - 根據(jù)v2求v1掖疮,因?yàn)?code>v1 + v2 = |v| ==>
v1 = |v| - v2
- 將v2公式代入v1 ==>
v1 = |v| - n(v·n / |n|2)
- v2平行于n:
-
向量
叉乘
總結(jié)【常用】-
向量叉乘運(yùn)算規(guī)則如下
- 向量的叉乘優(yōu)先級高于點(diǎn)乘
- 幾何意義
- a × b = c,c垂直于a和b構(gòu)成的平面颗祝,即c是該平面的法線浊闪,分別與a,b都垂直
- a × b = c螺戳,即
|c| = |a||b|cosα
- 叉乘既
不滿足交換律
搁宾,也不滿足結(jié)合律
-
任何向量與自己叉乘等于零向量,即 向量a × 向量a = 0
-
矩陣
矩陣在OpenGL中推薦使用一維數(shù)組存儲
方陣:
行=列
的矩陣向量可以當(dāng)做
1*n(行向量) / n*1(列向量)
的矩陣使用標(biāo)量和矩陣的乘法:將矩陣中的每個(gè)數(shù)都乘以標(biāo)量
-
矩陣與矩陣相乘倔幼,即
A?*? * B?*? = C?*?
盖腿,A的列數(shù)必須匹配B的行數(shù)(記法圖示如下)
-
矩陣乘法總結(jié)
- 當(dāng)S是單位矩陣且乘法有意義,任意矩陣M乘以方陣S,翩腐,那么得到的結(jié)果就是原矩陣鸟款,即
MI = IM = M
- 矩陣乘法不滿足交換律,即
AB != BA
- 矩陣乘法滿足結(jié)合律茂卦,前提是ABC的維數(shù)使其乘法有意義欠雌,即
(AB)C = A(BC)
- 矩陣乘法也滿足與標(biāo)量/向量的結(jié)合律,即
(kA)B = k(AB) = A(kB); (vA)B = v(AB)
- 矩陣乘積的轉(zhuǎn)置 相當(dāng)于 先轉(zhuǎn)置矩陣疙筹,然后以相反順序相乘富俄,即
(AB)? = B?A?
- 當(dāng)S是單位矩陣且乘法有意義,任意矩陣M乘以方陣S,翩腐,那么得到的結(jié)果就是原矩陣鸟款,即
-
向量與矩陣乘法總結(jié)
- 行向量左乘矩陣,結(jié)果是行向量
- 列向量右乘矩陣而咆,結(jié)果實(shí)列向量
- 結(jié)果向量中每個(gè)元素都是原向量與矩陣中單獨(dú)行/列的點(diǎn)積
- 矩陣-向量成法滿足對向量加法的分配律霍比,即
(v+w)M = vM + wM
,其中v暴备,w是向量悠瞬,M是矩陣
-
基向量:單位向量
-
p、q涯捻、r 定義分別指向+x,+y,+z?方向的單位向量量浅妆,v = xp+yq+zr
-
矩陣M對應(yīng)到坐標(biāo)軸的單位向量如圖所示
-
- 矩陣的每一行都能解釋為轉(zhuǎn)換后的基向量
- 矩陣的幾何意義
- 方陣的行能被解釋為坐標(biāo)的基向量
- 為了將向量從原坐標(biāo)變換到新坐標(biāo),需要用向量乘以一個(gè)矩陣
- 線性變換:從原坐標(biāo)系到基向量定義的新坐標(biāo)系的變化
- 零向量乘以任何矩陣仍是零向量
2D下的旋轉(zhuǎn)矩陣公式推演
核心動畫CoreAnimation中蘋果官方文檔有提到
2D下的旋轉(zhuǎn)時(shí)圍繞原心旋轉(zhuǎn)的
三角函數(shù)表
三角函數(shù)/角度 | 0(0°) | π/2(90°) | π(180°) | 3π/2(270°) | 2π(360°) |
---|---|---|---|---|---|
sinα | 0 | 1 | 0 | -1 | 0 |
cosα | 1 | 0 | -1 | 0 | 1 |
tanα | 0 | 不存在 | 0 | 不存在 | 0 |
cotα | 不存在 | 0 | 不存在 | 0 | 不存在 |
旋轉(zhuǎn)時(shí)向量的變化與三角函數(shù)值的關(guān)系
-
旋轉(zhuǎn)變化如圖所示
-
向量與三角函數(shù)值的關(guān)系
3D下的旋轉(zhuǎn)矩陣公式推演
-
3D下的旋轉(zhuǎn)時(shí)圍繞某個(gè)軸旋轉(zhuǎn)的障癌,當(dāng)圍繞哪個(gè)軸凌外,哪個(gè)軸的矩陣中所對應(yīng)的行和列就用基向量表示
圍繞x軸旋轉(zhuǎn),x軸不會發(fā)生變化涛浙,所以x對應(yīng)的矩陣行用基向量表示,圖示如下
q向量的值變化過程為: +y(起始) ==> +z ==> -y ==> -z
1 0 0
0 0 1
0 1 0
0 0 -1
0 -1 0r向量的值變化過程:+z(起始) ==> -y ==> -z ==> +y
0 0 1
0 -1 0
0 0 -1
0 1 0
p康辑、r變化過程圖示為
與三角函數(shù)的關(guān)系如圖所示
-
圍繞Y、圍繞Z與圍繞x類似
- 圍繞Y軸時(shí)R的矩陣:010表示的是基向量轿亮,圍繞誰懂疮薇,誰就必須由基向量表示
-
圍繞Y軸時(shí)R的矩陣:001表示的是基向量
- 圍繞Y軸時(shí)R的矩陣:010表示的是基向量轿亮,圍繞誰懂疮薇,誰就必須由基向量表示
縮放與平移矩陣公式推演
- 2D縮放:基向量p和q分別乘以標(biāo)量k
- 平移:在哪個(gè)軸平移,將這個(gè)軸的對應(yīng)的值與平移距離相加