前言
因為實驗需要用到拉普拉斯形變,但找了好久找到一個非常適合入門的資料。再此記錄下我的學習過程,也算搬運翻譯過來。
Introduction / Basic Laplacian Mesh Representation
首先本文的代碼中的拉普拉斯形變是作用在三角網格組成的3D model上的。一個三維模型是由很多個三角網格組成,每個三角網格有三個頂點。
拉普拉斯網格通過跟蹤微分頂點信息而不是絕對信息來存儲三角形網格的幾何信息。當在網格上執行某些變換(尤其是變形)時,它可以有效地保存頂點間的關系。它還允許以非常自然的方式在整個表面上進行平滑的插值。
所以拉普拉斯形變,最重要的就是保存了頂點間的關系。當我們移動一個點后,其他的頂點為了維持一個能量函數不變,從而跟着移動。
Laplacian 的主要思想是:
N(i)表示i的鄰居,\(w_{ij}\)就是各種權(重需要計算)。注意后面那個分式的的分母就是所有權重之和。如果i的相鄰頂點的權重全部是1,那么:
這里的d_i表示i的鄰居個數。這種權重全為1的情況也叫做umberalla weighting。加入有5個鄰接頂點,每個都是1/5。這是什么,這就是這5個頂點組成的幾何體的中心。
另外一種比較常見的權重是余切權重:
參考這幅圖,選擇的權重與角的余切值有關。點i和j相連的邊所對的兩個角的余切值組成權重:
這樣的給鄰接點賦值權重,能更好的保存它的幾何信息。
構造delta坐標系
然后構造delta坐標系,也就是記錄每個點i與所有點關系的一個權重矩陣:
- 如果j是i的鄰居,那么讓矩陣[i,j]處的值等於\(-w_{ij}\),這里的\(w_{ij}\)就是我們上面說的那些不同的權重算法,任選一種。這里選余切重。
- 如果j不是i的鄰居且j不是i,那么令矩陣[i,j]處的值為0。
- 如果j==i,那么令矩陣[i,j]處的值為1。
簡言之,鄰接點賦值為\(w_{ij}\),i點處賦值為1,其他非鄰接賦值為0。