推導Discrete Laplace-Beltrami Operator
梯度 - nabla運算元
梯度之前已經寫過,之前給的梯度的求法都是跟可導函式有關,這裡來討論一下三角形網格上的梯度如何定義。
在三角形的三個頂點處有
, 我們假設有分段函式f,
,
是三⻆角形的⼀次Lagrange插值基函式:
的特點都是在自身i, j, k 之處都等於1,在另外兩個頂點處都為0。
結合重心座標,對於三角形平面上的一個點
:
同時:
,那麼我們對這個基函式求梯度的話:
,所以我們對上面的式子求梯度並代入得:
同時我們來看這個
,比如對於
, 這個變化最大的方向當然就是跟
垂直的方向,再看一眼圖:
所以梯度是:
其中
的方向是表示向量在三角形平面逆時針旋轉90°,
表示三角形面積。想法很簡單,也就是
。那麼函式值的變化是 (1-0),而梯度方向的變化是 (h-0),再加上方向的考量,所以
。
所以:
散度 - Laplace運算元
有了上面的梯度計算,我們可以開始推導散度-Laplace運算元在網格上的公式。首先回憶我們的散度的物理意義其實是‘空間中的這個點是否產生液體,其實也就是來看在此點處向內的箭頭比較多還是向外的箭頭比較多’。散度的計算我們用的是 Laplace 運算元,也就是:
,對於網格上的一點(當然我們這裡的網格都是已經經過處理了,性質非常良好的網格,不會是那種剛剛scan好的,比如有洞啊,奇奇怪怪的網格),使用高斯公式:
入上圖所示,這裡的
區域是 mixed Voronoi cell, 也就是周邊三角形的外心,當然三角形的外心可能在三角形之外,我們把它clip到三角形的邊上的中點。之所以選擇 mixed Voronoi cell 是因為它產生的error最小(leads to tight error bounds for the discrete operators as shown in [Meyer et al。 03])。
同時還值得注意的一點就是,雖然我們這裡貌似把這些三角形都畫在一個平面上,但是我們要知道,這些三角形與三角形之間,當然可能不在同一個平面上。
繼續使用高斯公式:
在每個三角形上是常量,所以我們對單個三角形來計算:
這裡是因為我們選取的是三角形的外心,所以當然
有以上關係。
我們繼續代入上面求得的關於梯度的表示式:
用
來表示
處的角度,我們有:
又根據點乘關係:
所以上面的式子可以化簡為:
注意上面的式子,
對應的角是
,
也是對邊的角
。
所以如果對整個
區域積分:
其中
是指的
的 one-ring neighbor,也就是周圍一圈的鄰居,而
是
作為邊對應的兩個角:
所以:
這也就是大名鼎鼎的 Laplace - Beltrami operator,也叫做 Cotan Formula(畢竟兩個contangent), 也有許多別的方式可以推匯出這個公式,此處不再贅述。
參考:
Polygon Mesh Processing 第三章
有關於它的更多推導資訊和引用可以參見書中提到的論文:
Discrete Differential-Geometry Operators for Triangulated 2-Manifolds
Computing Discrete Minimal Surfaces and Their Conjugates