從離散霍奇星算子到一個矩陣
第二篇把整套離散外微分的機器交到了我們手上:函數以 0-上鏈的身分住在頂點上,離散外導數 d 不過是帶號的關聯(餘邊界)矩陣,而離散霍奇星算子則是一個對角矩陣,裝著原始與對偶的尺寸比。光滑的拉普拉斯-貝爾特拉米算子作用在函數上即是 delta d——梯度的散度,或寫作 d* d。於是離散的配方被逼著定下、毫無新的選擇餘地:組裝 L = d^T (star_1) d,其中 d 是頂點到邊的餘邊界,star_1 是邊上的對角霍奇星。本篇引人入勝之處在於:當你在三角網格上實際執行這純形式上的組裝時,答案一點也不抽象——每一個元素都是網格角度的餘切之和。
為何偏偏是餘切?邊上的霍奇星是比值(對偶邊長)/(原始邊長)。在三角網格中,最自然的對偶是外心對偶:橫越一條原始邊的那條對偶邊,連接著相鄰兩三角形的外心。用正弦定理稍作計算便可看出,一條內部邊的這個長度比等於 (cot alpha + cot beta) / 2,其中 alpha 與 beta 是該邊在其兩個三角形中所「對」的兩個角。這些餘切並非某人為了讓平滑化好看而逆向湊出的巧計;它們恰恰就是外心霍奇星所算出的東西。這是它誠實的來歷,在公式開始顯得像魔法之前,值得先牢牢記住。
把餘切公式寫出來
這就是算子的全貌。對一個在頂點處取樣的函數 u,餘切拉普拉斯算子在內部頂點 i 處為 (L u)_i = (1/2) 對鄰居 j 求和 (cot alpha_ij + cot beta_ij) (u_i - u_j),其中 alpha_ij 與 beta_ij 是邊 ij 所對的兩個角。寫成矩陣時,L 是對稱的,每個非對角元素 L_ij = -(1/2)(cot alpha_ij + cot beta_ij),而對角元素 L_ii 是該列之和的相反數,好讓常數被消滅:L 作用於全一向量為零,恰好映照出光滑情形中「常數函數的拉普拉斯為零」這件事。請注意它只依賴於角度,從不直接依賴邊長——這是它共形性格的標記,我們稍後便會兌現。
Cotangent Laplacian on a triangle mesh
(L u)_i = (1/2) * sum_{j ~ i} (cot alpha_ij + cot beta_ij) * (u_i - u_j)
alpha_ij , beta_ij = the two angles OPPOSITE edge ij
(one in each triangle sharing edge ij)
Matrix entries:
L_ij = -(1/2)(cot alpha_ij + cot beta_ij) (i != j, neighbors)
L_ii = - sum_{j != i} L_ij (rows sum to 0)
Mass / area (lumped, barycentric):
M_ii = (1/3) * (total area of triangles touching vertex i)
'True' Laplace-Beltrami: Delta = M^{-1} L
Weak / variational form: stiffness L , mass M -> generalized problem L x = lambda M x上面的公式悄悄藏了一個微妙之處:L 本身是剛度矩陣,是 integral of grad u dot grad v 的離散對應物,還不是拉普拉斯-貝爾特拉米算子。要還原出一個特徵值與光滑拉普拉斯相符的算子,你必須除以一個記錄每個頂點所「擁有」面積的質量矩陣 M——集中型的選擇 M_ii =(相鄰三角形面積的)1/3 是標準做法。真正的離散拉普拉斯-貝爾特拉米於是是 M^{-1} L。這剛度與質量的分割,正是有限元的故事(三角形上的線性帽函數),而這絕非巧合:餘切拉普拉斯算子「就是」分片線性的有限元拉普拉斯,只是從霍奇星那一側被重新發現。要讓剛度與質量保持區分,因為特徵值、熱流與泊松求解全都需要那個 M。
它在何處奏效,又在何處反咬
餘切拉普拉斯算子承襲了光滑拉普拉斯一連串漂亮的結構性質,這正是它稱霸此領域的原因。它是對稱的,故特徵值為實、特徵向量正交。在閉合網格上它唯一的零向量是常數,與光滑核相符。關鍵在於它在強烈的意義下是內蘊的:因為它只看角度,所以它在網格的任何剛體運動下不變,而且更微妙地,在加密下表現正確——加密三角剖分,算子便收斂到底層曲面的光滑拉普拉斯-貝爾特拉米算子。正是這個性質,讓它配得上「那個對的離散化」之名,而不僅僅是「一種離散化」。
在使用它之前,再說兩個誠實的告誡。其一,約定各異:許多論文把因子 1/2 吸收進質量矩陣,有些採用未集中(完整加勒金)的質量矩陣而非集中型對角,而符號在文獻中對半分裂於 L(半正定)與 -L(使其在 R^n 上與負的光滑拉普拉斯相符)之間。要聲明你指的是哪一個。其二,此算子唯有在具一致定向的流形網格上才有良好定義;非流形邊(被三個或以上三角形共用)與邊界邊(只屬一個三角形,故只有一個餘切)都需明確處理。在邊界邊上你只需保留那唯一可用的餘切——公式優雅地退化,這也是它魅力的一部分。
它讓你能做的三件事
現在來看回報:一旦 L 與 M 在手,幾乎每一項經典的網格處理任務都成了一行就能寫完的問題。平滑化/去噪運行熱方程:把頂點座標本身當成三個純量函數,依 (I + t M^{-1} L) x_new = x_old 演化,這個隱式步驟擴散掉高頻雜訊、卻原封不動地留下低頻的形狀——這是平均曲率流最簡單的離散形式,因為 L 作用在嵌入上便給出(兩倍面積乘以)平均曲率法向量。泊松重建與編輯求解 L x = b:指定一個目標的散度或梯度場 b(譬如一個被變形的把手),讓 L 在最小平方意義下找出最契合它的曲面,這正是保細節變形與無縫複製背後的主力。
第三項用途最為深刻。L 的特徵向量——廣義問題 L phi = lambda M phi 的解——是鼓面振動模態的離散對應物,是曲面的拉普拉斯特徵函數。最小非零特徵值的特徵向量把形狀分割成兩個自然的半部(譜聚類與分割);前數百個特徵向量構成一個頻率基底,在其中你能對幾何作低通濾波、壓縮它,或計算用於形狀匹配的熱核距離與雙調和距離。完整的特徵值譜是網格的一個等距不變指紋——這恰是聆聽鼓的形狀的離散版本。兩個內蘊上是同一曲面的網格,無論嵌入方式多麼不同,都共享同一個譜。
共形參數化,以及誠實的界限
L 那只依角度的性格,在參數化中得到最顯眼的回報:把彎曲的網格攤平到平面上,好讓貼圖或座標網格能被套用。因為餘切拉普拉斯算子衡量的是角度畸變,極小化離散狄利克雷能量 x^T L x——也就是在內部以固定邊界求解 L u = 0——便產生一個在離散設定所允許的範圍內盡可能調和、因而盡可能保角的映射。這正是共形參數化的核心:一種即使必須拉伸面積、也讓小形狀不致畸變的攤平,重現了「調和映射極小化狄利克雷能量」這項光滑事實的離散迴響。餘切權重恰恰是讓「離散共形」成為一個有意義且穩定的概念、而非一句口號的關鍵。
但在這裡,誠實必須說得大聲,因為參數化正是天真期待破滅之處。你無法在不切開的情況下把球面或環面這類閉曲面攤平到平面上——這是拓樸,不是數值,沒有哪種權重選擇能修補它。即便在圓盤拓樸的補片上,離散映射也可能自我摺疊(喪失單射性),恰恰就在餘切權重變負的那些鈍角三角形上;要保證無摺疊的嵌入需要額外的結構(圖特定理僅在凸邊界與非負權重下給出此保證)。而「離散共形」是一個道地的近似:不存在一個離散映射能同時做到「恰好保角」「恰好無摺疊」與「恰好匹配指定邊界」——你得在這些之間權衡,而不同方法(餘切調和、最小平方共形、圓圖樣、共形等價流)作出不同的取捨。要清楚你的工具正在作哪一種妥協。
退一步看本級的主線。第一篇把曲率離散化,並無誤差項地精確證明了一條離散高斯-博內定理;第二篇建造了離散外微分,使得 d、楔積與霍奇星算子全都與它們的光滑對應物交換;而本篇把這兩者一併兌現,將 delta-d 組裝成餘切拉普拉斯算子——那台運行平滑化、編輯、譜指紋與共形攤平的引擎。其教訓是:「對的離散化」就是那個保留結構的離散化:對稱性、常數核、加密下的收斂、共形/角度的性格。當一個離散算子保住了結構,隨之而來的演算法便免費地繼承了那些定理。這份結構上的忠實,遠勝於任何單一公式,才是幾何處理真正的主題。