在遊戲程式設計中我們經常會用到施密特正交化,比如求解法線的切空間,我們需要把一組非正交的座標系(nbt),轉換為正交的座標系(n b』 t』)。
施密特正交化如何理解呢?我們先來看看官方給出的解釋。
施密特正交化(schmidt orthogonalization)是求歐氏空間正交基的一種方法。從歐氏空間任意線性無關的向量組α1,α2,……,αm出發,求得正交向量組β1,β2,……,βm,使由α1,α2,……,αm與向量組β1,β2,……,βm等價,再將正交向量組中每個向量經過單位化,就得到乙個標準正交向量組,這種方法稱為施密特正交化。
第乙個問題什麼是歐式空間?
遊戲中所有向量的運算都是在歐式空間中,也就初中,高中學的向量空間都是歐式空間。
從起源來講,歐式空間是滿足歐幾里得《幾何原本》中幾何五公理的空間。維基百科中給出的解釋如下:
1. 從一點向另一點可以引一條直線。
2. 任意線段能無限延伸成一條直線。
3. 給定任意線段,可以以其乙個端點作為圓心,該線段作為半徑作乙個圓。
4. 所有直角都相等。
5. 若兩條直線都與第三條直線相交,並且在同一邊的內角之和小於兩個直角,則這兩條直線在這一邊必定相交。
第二個問題什麼是線性無關向量組?
如果有向量組a1,a2,a3,...an,給定方程k1*a1+k2*a2+k3*a3+...+kn*an = 0,只存在唯一的一組解k1=k2=...=kn=0。那麼該組向量就是線性無關向量組。
幾何意義就是如果是二維向量組a1,a2,那麼只要a1和a2不共邊,他們就是線性無關向量組。
k1*a1 + k2*a2 = 0。假定a1和a2不是零向量且不共邊,那麼只有k1=k2=0,讓a1和a2變成零向量,他們相加才會得0。否則兩個非零且不共邊的向量相加一定會得出乙個新的非零向量。
共邊向量相加可以得出零向量,比如兩個方向相反且模一樣的向量相加。
如果是三維向量組a1,a2,a3不共面,他們就是線性無關向量組。
如果a1,a2,a3共面的話根據共面向量定理a3 = x * a1 + y * a2。一定存在有序實數解x,y。
使得 x * a1 + y * a2 - a3 = 0。k1=x,k2 = y,k3 = -1。所以三個向量如果共面的話一定是線性相關的向量組。
如果三個向量不共面並且都不為零向量,那麼他們相加一定會得出乙個新的非零向量。所以只有通過k1=k2=k3=0,讓a1,a2,a3變成零向量以後相加才能等於0。所以他們是線性無關向量組。
擴充套件到n維空間,也就是說如果乙個向量組線性無關,那麼其中任何乙個向量都不能被其他向量線性表示。
比如在二維空間如果兩個向量共邊,那麼這兩個向量就可以乘以乙個k來表示另外乙個向量。
如果在三維空間如果三個向量共面,那麼就存在一組有序的實數(x,y)分別乘上兩個向量來表示另外乙個向量。
換句話說向量組中的每個向量都是不能被其他向量替代的,那麼這組向量就是線性無關向量。
接下來我們看看施密特正交化定義。
給定一組線性無關的向量組α1,α2,……,αm。根據這組向量我們其實可以定義乙個m維的空間座標系。只不過他們不是兩兩正交的座標系。我們希望通過施密特正交化,求出一組正交座標系β1,β2,……,βm,使得這兩組座標系等價。
什麼是向量組等價,兩個向量組可以互相線性表示。我們就說這兩個向量組等價。下面我們給出施密特正交化的公式。
給定一組線性無關向量組,我們通過施密特正交化將其轉換為一組正交化向量組的步驟是:
公式看上去很複雜,理解其中的幾何意義後就不複雜了。
已知乙個向量v和乙個單位向量n,那麼向量v在單位向量n上的投影向量就是這兩個向量的點積
如果向量n不是單位向量,我們只需要把n變成單位向量即可,那麼向量v在向量n上的投影向量為
向量w = v-p就能得到乙個垂直的向量w。
對於二維空間中v0,v1它的正交向量組w0,w1就是。
令
三維向量同理附上一張貼圖方便理解
以此類推就能理解斯施密特正交化的過程了。
施密特正交化
對於一組向量,有時候我們需要對其進行正交化處理,也就是說,該組向量中任意兩個向量都是互相垂直的。那麼,要怎麼做呢?假設只有兩個向量,vec v 0 和 vec v 1 正交化的幾何示意圖如下所示。假設正交化之後的向量為 vec w 0 和 vec w 1 那麼由圖可知,可得 vec w 0 vec ...
列正交化 施密特正交化方法
a1 1 1 0 0 a2 1 0 1 0 a3 1 0 0 1 a a1 a2 a3 u a m,n size u y u y 1 y 1 norm y 1 for k 2 n y k u k endfor k 2 n for j k n y j y j y k 1 y j y k 1 endp1...
向量的施密特正交化
先看乙個例子 設三個向量分別為 1 2 3 1,1,0 t 1,0,1 t 1,1,1 t 那麼對 1 2 正交化 1 2 1 1 1,0 t 2 2,1 1,1 1 1,0 1 t 1 1 0 1 1 01 1 1 1 0 0 1,1,0 t 1 0,1 t 12 1 1,0 t 12 1 1,2...