JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

單純複形、離散曲率與離散高斯-博內定理

當每一個面都是完全平的三角形時,你要如何賦予一張由三角形沿邊黏合而成的多面體網格「曲率」的概念?整個答案都藏在頂點上,而當你把它全部加起來,它分毫不差地落在光滑高斯-博內定理早已許諾的那個數值上。

從光滑曲面到組合曲面

本級的一切都活在單純複形之上,所以在替它鋪上幾何之前,先把這個物件講清楚。一個單純複形是一堆單形——頂點(0-單形)、邊(1-單形)、三角形(2-單形)、四面體(3-單形)——依兩條乾淨的規則黏合而成:複形中任一單形的每個面也都在複形中;而任兩個單形相交於一個共同的面,否則就完全不相交。第二條規則是初學者常常漏掉的:兩個三角形可以共用一整條邊或單一頂點,但它們不可以穿過彼此的內部,也不可以在半條邊上重疊。正是這份剛性,使複形成為某個空間忠實的組合骨架,而非一團亂麻。

當這樣的複形被黏合得「每條邊恰好被兩個三角形共用、且每個頂點周圍的三角形扇形展開成單一圓盤」時,結果就是一張三角剖分曲面——一個如假包換的拓樸曲面的組合模型。這是第一卷裡光滑流形的離散表親:它具有相同的整體形狀(球面、環面、克萊因瓶),但由有限多個平的小片建成,電腦可以精確儲存。我們不是先近似曲面再微分;我們把組合保持精確,然後問哪些幾何量能存活下來。本篇的驚喜,正在於存活下來的有那麼多。

曲率跑去哪了?把它逼到頂點上

把謎題尖銳地擺出來。取一個球面,用數千個平的三角形把它三角剖分。每個面都是平的——高斯曲率為零。每條邊都是一道摺痕,但摺痕是可展開的:你可以把相鄰的兩個三角形攤平到桌面上而不拉伸,所以一隻爬過邊的小生物也感覺不到任何內蘊的扭曲。然而整個東西卻明明白白是彎的。那麼曲率在哪裡?答案是:三角剖分曲面所有的內蘊曲率都集中在頂點上,而光滑的食譜告訴我們如何找到它:曲率就是周圍角度未能加總成平坦的 2 pi 的那份虧損。

站在一個頂點 v 上,看著繞它扇形展開的那些三角形。每個三角形貢獻它在 v 處的角隅角度——它在 v 的內角。在一張完全平坦的紙上,這些角度恰好加總為 2 pi:你可以把這把扇子攤平而不重疊也不留縫。若它們加總「小於」2 pi 就有一道縫;把縫合起來會迫出一個錐,曲面像派對帽的尖端那樣朝外鼓起——正曲率。若它們加總「大於」2 pi,這把扇子無法攤平——它像羽衣甘藍葉子的邊緣那樣起皺——負曲率。v 處的角虧損,我們記作 kappa(v),恰好就是 2 pi 減去 v 周圍那些角隅角度的總和。

Angle defect at an interior vertex v:

    kappa(v)  =  2*pi  -  sum over triangles T touching v of  theta_T(v)

    theta_T(v) = interior angle of triangle T at the vertex v

  angles sum < 2pi   ->  kappa > 0   (cone, party-hat tip, positive curvature)
  angles sum = 2pi   ->  kappa = 0   (flat, fan lies flat, zero curvature)
  angles sum > 2pi   ->  kappa < 0   (saddle, kale-leaf ruffle, negative curvature)

For a boundary vertex use   pi - (sum of angles)   in place of  2*pi - (...).
角虧損:2 pi 減去在一個內部頂點相會的角度。它的符號就是曲率的符號;它是高斯曲率積分後集中於頂點的離散類比。

為何角虧損「就是」曲率——而不僅是比喻

人們很容易把角虧損稱作曲率的一個聰明的代理量,但它遠比那更誠實——它就是曲率的積分,而且是精確的。回想曲線與曲面那一級:光滑的高斯曲率 K 恰恰掌管測地三角形的角盈——一個測地三角形的內角和為 pi 加上(K 在該三角形上的積分)。等價地說,把一個向量沿一個小迴圈做平行移動,它會轉動「所圍住的 K 之積分」那麼多——曲率就是單位面積的角虧損。而頂點上的角虧損,恰好就是那個積分,只不過所有曲率都被壓碎到單一一點上:kappa(v) 就是你可能彎成那個錐的任何光滑曲面的總高斯曲率。

這正是為何角虧損是「內蘊」的——它只依賴角隅角度,而後者只依賴邊長,從不依賴曲面如何坐落於空間之中。這是高斯的絕妙定理的離散影子:曲率僅由度量決定。兩張邊長相同、但在 R^3 中折法不同的網格,在每個頂點上都有相同的虧損,恰如那個光滑定理所許諾。把一個錐沿一道切口剪開並攤平:角度不變、虧損不變;而一張平紙捲成圓柱,確實處處虧損為零——這與「圓柱在內蘊上是平的,儘管它看起來是彎的」這個事實相符。

離散高斯-博內:一個拓樸不變量分毫不差地掉出來

現在,把一張封閉三角剖分曲面每個頂點上的角虧損全部加起來。光滑的高斯-博內定理說:封閉曲面的總高斯曲率等於 2 pi 乘以它的歐拉示性數,即 K 的積分等於 2 pi chi(M)。離散高斯-博內定理是同一個陳述,只是把積分換成虧損的有限和:所有頂點上 kappa(v) 的總和,等於 2 pi 乘以歐拉示性數 chi = V - E + F。而美妙之處在於——這不是一個隨細化才變準的近似。它在每張三角剖分曲面上都是「確切」的恆等式,無論三角形多粗糙、多歪斜。

證明只是幾行的計數,而值得把它走一遍,因為它顯示了這個定理是被「逼出來」的、而非僥倖。將 kappa(v) 求和等於 sum over v of (2 pi 減去 v 處的角度和)。第一部分是 2 pi V。第二部分是「所有」三角形「所有」角隅角度的總和,只是按頂點重新分組了;改成按三角形分組,由於每個三角形的三個角加總為 pi,便得到 pi F。所以總虧損是 2 pi V - pi F。現在用上「曲面是封閉且三角剖分的」:每個面有 3 條邊、每條邊被 2 個面共用,所以 3F = 2E。把 pi F 用 2E = 3F 改寫並代入,整個東西便塌縮成 2 pi (V - E + F) = 2 pi chi。

代入一個具體形狀來感受它。正八面體有 6 個頂點、12 條邊、8 個面,所以 chi = 6 - 12 + 8 = 2,即球面的歐拉示性數;定理預言總虧損為 4 pi。直接驗證:正八面體的面是正三角形,每個頂點由四個面相會,所以每個頂點看到 4 乘以 pi/3 = 4 pi/3,給出每個頂點 kappa = 2 pi - 4 pi/3 = 2 pi/3,而 6 個頂點產生 6 乘以 2 pi/3 = 4 pi。環面則述說互補的故事:chi = 0,所以各虧損必須相消為零總和——外緣每一分的正曲率,都由內孔的負曲率償付,那正是你手指在甜甜圈內側摸到的鞍狀幾何。

這替你換來什麼,以及誠實的限制

用第一卷教你讀它光滑母親的方式,來讀這個離散定理:當作局部幾何與整體拓樸之間的一座橋。左邊是局部的——每個頂點上一個有限、可計算、僅由邊長決定的數。右邊是一個對度量視而不見的拓樸不變量:chi = V - E + F 對一個粗糙的八面體(chi = 2)與一個百萬三角形的球面(chi = 2)都相同。所以你能在「事先不知道形狀拓樸」的情況下計算它的拓樸不變量——只要把角虧損全部加總再除以 2 pi。一張帶刺的球面網格與一張光滑的都報告 2;一張咖啡杯網格報告 0,即環面的歐拉示性數,告訴你它恰有一個把手。

  1. 把網格建成一個單純複形:一張頂點表與一張三角形面表,方向一致地定向,使每條內部邊被它的兩個面各往一個方向走過一次。
  2. 在每個內部頂點 v 處,蒐集相鄰的三角形,用邊長透過餘弦定律算出每個在 v 的角隅角度,並構造 kappa(v) = 2 pi 減去它們的總和。
  3. 把所有頂點上的 kappa(v) 加總並除以 2 pi:你剛剛只憑幾何就算出了 chi = V - E + F,一個確切的整數。
  4. 直接從組合計數 V - E + F 來交叉驗證;兩個數必須完全一致。不一致就表示你的網格不是一張乾淨的封閉曲面(非流形邊、有邊界、或有破洞)。

誠實面對「沒有」承襲過來的東西,因為「離散等於光滑」這個口號只對了一半。虧損完美地捕捉了「內蘊」曲率,但離散的「外蘊」量則糟亂得多:並沒有單一典範的離散平均曲率——餘切拉普拉斯算子的定義、體積梯度的定義、與法錐的定義,在離開光滑極限後彼此相左,而在它們之間取捨,是你在第三篇會遇上的真切建模抉擇。收斂性也帶刺:角虧損只對合理的網格才收斂到積分曲率,而圓柱的病態「施瓦茨燈籠」三角剖分,能讓離散面積即使在網格細化下仍發散。那些確切的定理是恩賜;逐點收斂則是另一個、有條件的承諾。把這兩個想法分開,你就不會被騙。