曲線
曲線是二維空間上可微分的一維流形。曲線可以用參數方程表示為如下形式:
其中x和y分別是關于u的可微函數,那么曲線在某一點的切向量則為各分量的一階導數組成的向量,即:
借由上式,如果p'(u)在u處不為0,則把這一點成為曲線的正則點。曲線上的點處處正則的曲線稱為正則曲線(Regular Curve)。
下式可以求曲線在某一點的法向量的值:
同樣的曲線是可以通過參數變換使用不同的參數來表示的。曲線的微分幾何關注諸如弧長、曲率之類的,獨立于特定參數之外的屬性,也就是說無論參數如何變換,這些屬性的值都是相等的。
弧長
對于上述曲線,起始點a到曲線上任意點u之間的弧長可以表示為:
即弧長是切向量長度對曲線參數的積分。可以發現,弧長獨立與特定參數,并且將參數u從區間[a, b]映射到了區間[0, L] (其中L是曲線的弧長)。
可以發現這是一個變上限積分函數,對兩側同時求導得到:
當切向量的模為1,即曲線的切向量為單位向量場的時候,參數u就是曲線的弧長參數了
曲率
曲線的曲率(curvature)就是針對曲線上某個點的切線方向角對弧長的轉動率,即單位弧長內曲線轉過的角度。
假設正則曲線的參數方程的參數為其弧長,圖像如上圖所示,α表示是曲線上的切向量(即p(s)的導數p’(s)),根據定義曲線的曲率為:
其中θ表示的是α(s)和α(s+Δs)兩個向量的夾角,要證明這個式子只需要按照導數定義展開即可:
對于曲率還有另外一個很重要且相關的屬性,即曲率半徑,即把那一段曲線盡可能地微分,直到最后近似為一個圓弧,此圓弧所對應的半徑即為曲線上該點的曲率半徑。這個圓弧所對應的圓一般稱作:Osculating Circle(密切圓)。
我們知道弧長與半徑的比值是弧度。對于這一段圓弧曲率的值為弧度于弧長的比值,而半徑的值為弧長于弧度的比值。
對于曲率和曲率半徑,可以得到下面的關系:
曲面
曲面的參數化表示
以地球地圖的展開為例,地球表面是一個閉合的曲面,為了印刷地圖,一般需要將其表面進行展開。
展開之前,首先沿著子午線將其“切開”,然后按下面這個樣子進行展開:
可以發現,北極點被變換為了線段AC,而南極點被變換了線段BD
這樣的一個球面,假設半徑為R,有兩種坐標表示的方法,分別是:(x, y, z)和(θ, ?)
前一種非常好理解,即球面某一點在3維笛卡爾坐標系下的坐標,那么球面的可以用下列隱式方程表示:
通過該方程能夠很快速地判斷空間中某個點與球面地位置關系。
后一種坐標中有兩個參數θ和?,其意義可以通過下面這張圖來理解(和球坐標非常類似)
理解后就不難得出兩種坐標的轉換方法:
其中θ的取值范圍為[0, 2π],?的取值范圍為[-0.5π, 0.5π],可以發現通過這張表示方法將“方形”區域映射到了一個球面上。
通過θ和?這兩個參數,可以畫出兩組類似經緯度的平行線,通過這些平行線,可以清楚的觀察出球面不同部分被扭曲的程度。
度量性質(Metric Property)
假設一個三維曲面的參數方程如下
其中x,y,z是關于參數u,v的可微函數,Ω是參數u,v的定義域。
同曲線類似,曲面的度量是由它的一階導數決定。x關于參數u,v的偏導數如下
這兩個偏導數表示的是如下兩條曲線上的切向量
很明顯這兩個方程分別是當曲面方程的某個參數固定后,以另一個參數為參數的方程。
通過上面這張圖,能夠很清晰的看出Cv,Cu,Xv,Xu的具體含義。
如果想要表示表示在平面某一點的法向量也很簡單,曲線方程在某一點關于參數u,v的偏導數確定了兩條切向量Xv,Xv,將這兩個向量做叉積即可得到曲面在這一點的法向量
上面的導數方向只有沿兩個參數的方向,如果要求曲面關于某一點在任意方向的導數,可以引入方向導數的概念。
在求解方向導數的時候需要給定一個方向向量,由于曲面方程以參數方程的形式給出,先定義一個在曲線方程參數空間u,v下的方向向量
那么曲面通過這一點,在參數空間上沿上述方向前進的曲線方程可以表示為
這時曲面在點(u0, v0)處,w方向的方向導數為:
向量w是定義在三維空間下的,而已知的方向向量是在二維參數空間上的,現在要將其從參數空間變換為曲面上的切向量:
只需要應用到雅可比矩陣即可完成這個變換:
此時雅可比矩陣的值為:
曲面的第一基本型
通過上面求解方向導數的過程可以發現,雅可比矩陣代表了一種從參數的定義域空間到曲面坐標空間的變換。通過雅可比矩陣可以知道一些量,諸如角度、距離和面積等,在這兩個空間之間的映射關系。
假設又兩個單位向量w1,w2,這兩個向量之間夾角的余弦值等于兩向量的內積。
向量在曲面空間和參數空間下的表示形式不同,單數可以明確的一點是,無論如何表示,向量之間的夾角是不會變的。
在上面的等式中,J乘以J的轉置這一部分就被稱為曲面的第一基本型
借由I,要通過參數來表示下面曲線的弧長:
首先觀察曲面的弧長公式:
接下來,用參數t來表示切向量w (ut, vt),則其模長為:
最后帶入計算可以得到弧長公式:
同理,可以用下面的方法求得曲面的面積:
曲面的曲率
曲面的曲率的定義是由曲線的曲率的定義擴充而來的,對于曲面上的一點,存在無數個切向量。對于曲面上的一點p,以及一條切向量t,這時可以定義曲率為:切向量t和曲面在這一點的法向量所成平面與曲面相交形成的直線在點p處的曲率。
將這個曲率寫成式子為:
其中II為第二基本型
上面關于曲面曲率的函數在切線方向變化的時候會有兩個極值(極大值和極小值),一般稱它們為主曲率(principal curvatures),如果兩極值不相等,就把取這兩個極值時的兩個切向量稱為主方向(principal directions)。如果兩極值相等,則曲面上這一點稱為臍點(umbilical),曲面上這一點的所有切向量都可以稱為主方向(principal directions),并且曲面這一點各方向的曲率相等。特殊地,當且僅當曲面為球面或平面時,其上所有的點都是臍點(umbilical)。
對于曲面的兩個主曲率和其在同一點任意方向的曲率,有如下的關系:
其中ψ為主方向 t1和指定方向t的夾角。可以看出,曲面的曲率僅僅由其兩個主曲率決定,這一點任意方向的法曲率都是這兩個主曲率的凸組合(convex combination),另外還能得出的一點是主方向永遠是相互正交的。
曲面的某個區域內的性質同樣可以用曲率張量來表示,曲率張量 C可以用下面的方法得到:
其中D是對角線元素為κ1,κ2,0的三階方陣,P也為三階方陣,由t1,t2,n三個列向量組成。
另外,還有兩種廣泛使用的描述曲率的方式:
- 平均曲率
- 高斯曲率
高斯曲率可以將曲面上的點分為3類:
橢圓點(elliptical point) K > 0:橢圓點在其附近的區域上通常是凸出的
雙曲線點(hyperbolic point) K < 0:雙曲點在其附近的區域上通常是馬鞍形
拋物線點(parabolic point) K = 0:拋物線點通常在橢圓曲線和雙曲線區域的分界線處
高斯曲率和平均曲率通常用在曲面的可視化分析上
內蘊幾何學(Intrinsic geometry)
在微分幾何中,那些只依賴于第一基本型的屬性被稱為是內蘊的(Intrinsic)。直觀上來說它們可以僅僅通過曲面二維特征來導出。例如曲面上曲線的長度,角度等都是內蘊的(Intrinsic)。
對于高斯曲率和平均曲率,前者在等距變換下是不變的,所以它是內蘊的(Intrinsic),即高斯曲率是可以由第一基本型直接決定的;而后者則不是,它依賴于曲面。
內蘊的(Intrinsic)通常被用來取表示參數的獨立性。
拉普拉斯算子
一般稱某函數梯度的散度為拉普拉斯算子,對于二元函數f(u, v),其在歐式空間上的二階差分算子(拉普拉斯算子)可以寫為:
拉普拉斯算子還可以推廣到二階流形曲面S上,其推廣形式稱為拉普拉斯-貝爾特拉米算子,定義為:
對于曲面上某一個具體的點x,其拉普拉斯-貝爾特拉米算子和其平均曲率存在下面的關系:
雖然這個式子說明平均曲率(非內蘊的)和拉普拉斯-貝爾特拉米算子之間存在某種關系,但是拉普拉斯-貝爾特拉米算子本身僅取決于第一基本型,是內蘊的。
離散微分算子
由于3D網格并不是連續的,而上面的討論是建立在曲面是光滑的基礎之上的。要將上述算子運用到3D網格上,需要將網格看作一個很粗糙的曲面,然后通過網格數據去計算這個近似曲面的微分屬性。
局部平均區域
一般的想法就是計算網格某個點以及與其相鄰點的微分屬性的平均值。
當網格某個點以及與其相鄰點組成這個區域的面積較大的時候,通過計算平均值得到的微分屬性會很穩定;而面積較小的時候,精細的變化則會被更好的保留。
常用的由下面三種定義這個面積的方法,其區別主要是在頂點周圍的三角形中取點的方式不同:
其中右圖中,當三角形為鈍角三角形時則取中心點對邊的中點,否則取三角形的外心。
法向量
在3D網格中,要計算某個三角面的法向量是比較容易的,只需要取兩條邊向量坐叉乘即可:
如果要計算某個頂點的法向量,同樣考慮對頂點周圍相鄰的三角形的法向量做加權平均:
權值αT的取法,一般常用的有下面幾種:
αT取常數1,這樣計算的時候就忽略了鄰邊的長度,三角形的面積,角度。對于不規則的網格,計算的結果一般都是違反直覺的。
αT取三角形的面積,這樣取的好處是便于計算(只需要進行叉乘運算就可以了,還不用對向量進行單位化),不過這種方法得到的結果有的時候也會出現違反直覺的情況。
αT取鄰邊的夾角,不過由于計算過程涉及到了三角函數,效率上相對要低一些,不過效果比前兩者好。
梯度
同樣是基于加權平均的方法,求解網格中某個三角形上某一點的坐標可以由三個頂點的梯度根據重心坐標的三個權值做加權平均。
對于分段線性函數f來說,其在三角形頂點上有對應的值。可以考慮用拉格朗日插值法來表示三角上任意一點的函數值(u是二維參數):
由于拉格朗日插值公式的基函數B具有下面的性質
兩邊同時做梯度運算可以得到
消去Bi后原來的式子為
頂點i處基函數的梯度為從頂點i處沿著對邊上高的方向的向量,且向量的模長為高的倒數,化簡后(向量旋轉90度后除以底邊的長得到單位向量,再除以高度的結果,其中底邊長乘以高度整好為面積的兩倍)為:
代入后可以得到三角形上分段線性函數的梯度為
離散形式的拉普拉斯算子
- Uniform形式的拉普拉斯算子
這一種形式直觀上來說就是以中心點i為起點,相鄰頂點平均值為終點的向量。
由于平面的平均曲率H為0,這時算子的結果應該是0,不過上式的結果并不一定是非0的,所以這種方法不太適合用在非等距網格上。。
這種方法只考慮了網格的連接性,所以使用范圍有限。
- 余切形式的拉普拉斯算子
這種形式更加的精準,直接計算頂點vi周圍的平均區域(之前提到過,有若干種取法),然后對其梯度的散度進行曲面積分,然后使用散度定理(高斯公式)進行展開計算,最后可以得到:
- 離散散度
因為拉普拉斯算子的定義為是梯度的散度,對于每一個三角形T給定一個向量w(如個給定分段線性函數f下的梯度向量),則其散度為
離散曲率
根據上面的式子,可以得到在離散形式下的平均曲率:
在[Meyer et al. 03]這篇文章中提到了離散形式下高斯曲率的表示方式:
根據高斯曲率、平均曲率和兩個主曲率的關系,可以得到主曲率的計算方法:
離散形式的曲率張量
其中β(e)表示和邊e相鄰三角形所在平面的有方向的二面角,e∩A(v)表示邊e在區域A中的長度,ē指邊e的單位向量。