首页 > 代码库 > Surface curvature
Surface curvature
在介绍曲面曲率之前,我们必须引入微分几何的一些基本概念。
如下图所示,$\mathbb{R}^3$空间中的一个连续曲面可以表示为由一个$\mathbb{R}^2$区域$M$通过映射函数$f:M\to\mathbb{R}^3$到$\mathbb{R}^3$中的一个集合,即$f(M)$。其中,$df(X)$为平面上向量$X$在曲面上的映射,也即为$f(M)$在点$p$处的一个切向量。
如果曲面点$p$处的某一向量$u$对点$p$处所有的切向量都满足
\[ df(X) \cdot u = 0 \]
则称$u$为曲面在点$p$处的法向量。
考虑由切向量$d(X)$和单位法向量$N$所构成的平面(下图淡蓝色平面),其与$f(M)$的交集为一平面曲线$c$,我们称$c$在$p$点处的曲率$\kappa_n(X)$为曲面沿方向$X$的normal curvature。
设曲线$c$在$p$点处的曲率值为$\kappa n$,$\kappa_n(X)$即为
\[\kappa_n(X)=N \cdot \kappa n \]
考虑到,
\[ \kappa n = \frac{dT}{d\ell}=\frac{dT}{dt}\frac{dt}{d\ell} \]
其中,$T=\frac{df(X)}{\| df(X) \|}$为单位切向量,$d\ell$是对曲线$c$弧长的微分。由于$\frac{d\ell}{dt}$也可以用$\| df(X) \|$来表示,因此可以得到:
\[
\begin{align}
\|df(X)\|\kappa_n &= N \cdot \frac{dT}{dt} \\
&= N \cdot \frac{d}{dt}\left(df(X)\|df(X)\|^{-1}\right) \\
&= N \cdot \left( \frac{d}{dt}(df(X) \right)
\|df(X)\|^{-1} + \underbrace{N \cdot df(X)}_{=0}\left(\frac{d}{dt}\|df(X)\|^{-1}\right)
\end{align}
\]
由于$N \cdot df(X) = 0$,对两边求导,可知$N \cdot (df(X))‘ = -dN(X) \cdot df(X)$,因此可得:
\[
\begin{align}
\| df(X) \|\kappa_n &= N \cdot \frac{(df(X))‘}{\|df(X)\|} \\
&= N \cdot \frac{-dN(X) \cdot df(X)}{\|df(X)\|}
\end{align}
\]
即
\[ \kappa_n=\frac{-dN(X) \cdot df(X)}{\|df(X)\|^2} \]
此即为曲面的曲率方程。
我们称能使得上式中取得最大值和最小值的向量$X_1$和$X_2$为principal directions,而相对应的曲率称为最大主曲率$\kappa_1$和最小主曲率$\kappa_2$,即
\[ \kappa_1=\max_X\kappa_n(X) \]
\[ \kappa_2=\min_X\kappa_n(X) \]
根据Euler定理(1760)可知,若$\kappa_1 \neq \kappa_2$则$X_1$正交于$X_2$。一般地,任一与$X_1$的夹角为$\theta$的单位向量$Y$,其normal curvature可以表示为:
\[ \kappa_n(Y)=\kappa_1 \cos^2\theta + \kappa_2 \sin^2\theta \]
而平均曲率(mean curvature)$H$即为主曲率的算数均值:
\[ H=\frac{\kappa_1+\kappa_2}{2} \]
高斯曲率(Gaussian curvature)$K$为主曲率几何均值的平方:
\[ K=\kappa_1\kappa_2 \]
一些例子:
\[ \kappa_1>0,\kappa_2=0,H>0,K=0 \]
\[ \kappa_1>0,\kappa_2<0,\kappa_1=-\kappa_2,H=0,K<0 \]
\[ \kappa_1>0,\kappa_2>0,H>0,K>0 \]
参考资料及图片来源:
Keenan Crane, de Goes, Fernando, et al. "Digital geometry processing with discrete exterior calculus." ACM SIGGRAPH 2013 Courses. ACM, 2013.
Surface curvature