翻译自 DISCRETE DIFFERENTIAL GEOMETRY: AN APPLIED INTRODUCTION 第五章 Curvature of Discrete Surfaces。如果有翻译错误或者不当的地方希望能指出,谢谢~
对于一个中的平滑曲面,法线方向很容易定义:它是正交于所有切向量的唯一方向——换句话说,它是”笔直插入“曲面的方向。对于离散曲面这个问题就不是这么简单了。如果一个网格有共面的面(所有顶点在一个公共平面上)那么这个法线当然上很好定义的:它就是这个平面的法线。但是如果这个多边形不是共面的,或者当我们要算一个顶点处的法线,那么这个法线应该如何定义就不是很清晰了。
实际上有很多种不同的可能,它们都分别来自看待平滑几何的不同方式。但是在深入之前,让我们先建立几个基本的几何事实。
向量面积
这里有一个简单的问题:你如何计算平面中一个多边形的面积?假设我们的多边形有顶点。一个计算面积的方法是像下图左边一样将另外一个点放到中间,并且将所有三角形的面积求和:
一个有趣的事实是如果我们将点放在任意位置,然后将带符号的三角形面积求和,我们仍然可以得到多边形的面积!(带符号的面积意思是当我们的顶点是顺时针方向的时候是负的;逆时针方向时是正的。)你可以仅仅通过看着这幅图来想象为什么会发生这种事情:正的三角形覆盖了“非常多”为负的三角形计算的面积。
这个证明是Stokes‘定理的一个应用——考虑对于一个平面多边形面积的不同的表达式:
注意到,我们可以将这个面积的表达式写为
其中我们在最后一步中应用Stokes‘定理将我们在整个曲面上的积分转换到仅仅在边界上。现在假设我们多边形的顶点有坐标。从这里我们可以明确得到边界积分,通过将每一条边上的积分求和:
由于坐标函数和沿着每条边是线性的(它们的微分和因此是常数),我们可以将这些积分写为
简而言之,我们证明了多边形的面积可以被简单写为
我们只看多边形面积这种情况的更一般的一个版本是曲面块的向量面积(vector area),它由整个域上的曲面法线的积分定义:
向量面积一个非常好的性质是它仅仅依赖边界的形状。作为结论,两个看起来十分不同的曲面(比如上面两个)仍然可以有相同的向量面积————这里的物理直观意义是向量面积测量了穿过边界曲面的全部通量。
对于一个平坦的区域曲面上的法线是常量,因此我们通过通常意义上的面积乘上单位法线就可以得到向量面积。当曲面不是平坦的时候事情变得更有趣了——比如,一个环带的向量面积是0因为相对的法线互相抵消了:
这里有另一个相当基础的问题:考虑一个中的三角形,并且想象我们被允许去拉动它的一个顶点。使它的面积增长最快的方法是什么?换句话说,相对于的梯度是什么?
你应该仅仅需要一些非常简单的几何参数——没有将内容写到坐标系中的需要等等。
面积梯度
将这些事实都先抛开,让我们看看定义顶点法线的几种不同的方法。大体上有两种从平滑图像上自然引申的定义:面积梯度(area gradient)和体积梯度(volume gradient);我们从前面那个开始。
面积梯度是问,“为了尽可能快的增加全部面积,我们应该往哪个方向“推”曲面?让所有的点沿着切向滑行显然什么也无法改变:我们仅仅会得到同样的曲面。实际上,为了增加曲面面积我们唯一能做的事情就是让曲面沿着法向运动。被用来定义顶点法线的想法是面积相对于给定顶点的梯度。
由于我们已经知道了图和表示单个三角形的面积梯度(上一节有一个练习没有翻译),我们可以简单地表示整个曲面的面积梯度:
当然,一个给定的顶点只会影响与相邻的三角形的面积。所以我们只需要将这一个小部分三角形的面积梯度求和。
平均曲率向量
上一个练习(没有翻译)中推导的面积梯度的表达式展现了离散微分几何上的所有东西,通常被成为余切公式(cotan formula)。足够有趣的是当使用一个完全不同的方法,被成为平均曲率向量(mean curvature vector),去定义顶点法线时同样的表达式一样会出现。特别的,对于一个平滑曲面我们有
其中是平均曲率,是单位曲面法线(我们想要去计算的东西),是Laplace-Beltramis算子(继续看下面)。因此,另一个定义离散曲面上顶点法线的方法简单地使用了离散拉普拉斯算子到顶点的坐标上并将得到的向量归一化。
这个问题现在变成,“你如何离散化拉普拉斯?“我们将在未来仔细看看这个问题,但是值得记录的事实是最直接的离散化将恰好带领我们回到余切公式!换句话说,我们从平均曲率向量得到的顶点法线和我们从面积梯度得到的是完全相同的。
这全部的理论帮助我们对于Laplace-Beltrami算子本身获得更好的直观感觉。不幸地,没有一个真正很好的方法去写下——你将在一些微分几何课本中找到的标准的坐标公式是,其中是度量。然而,这个混乱的表达式对于到底做了什么事几乎没有提供一点直观感受,并且当它被用来离散化时,由于对于一个三角网格我们从来都没有一个的坐标表示,因此几乎是没有用的!更早些时候,我们看到(0-型)拉普拉斯可以被表示为,它引导了一个相当直接的离散化。但是现在,我们将使用另一个我们更早学到的工具:共形参数化(conformal parameterization)。记得当是一个共形映射,那么上的长度和上的长度通过一个正尺度相关。换句话说,对于一些上的实值函数有。此外,共形参数化总是存在的——换句话说,为了使用共形坐标进行证明或者其它的计算我们不必对我们的几何设置一些特殊的假设。因此当讨论Laplace-Beltrami时共形坐标是有用的,我们可以将就写为平面拉普拉斯的重新尺度化,即由二阶偏导的和除以测量尺度因子:
其中和是任意一对单位正交的方向。
这里的几何意义是什么呢?记得对于1D中一个普通的传统函数,二阶导数本质上告诉我们的是函数的曲率,即它是凹的还是凸的?
当然,由于是二阶导数的和,它会告诉我们一些关于平均曲率的事情也就不是很让人惊讶了!
体积梯度
另一个构造法线的方法是使用体积梯度(volume gradient)。假设我们的曲面包住了体积为的一些空间区域。和之前一样,我们知道沿着曲面的切向滑动它自己不能真正改变什么东西:我们会得到相同的曲面,它包住了同样的空间区域。因此,最快增加的方法还是在法线方向上移动曲面。一个多少有点令人惊讶的事实是,在离散情况下,体积梯度相对于面积梯度的确对于顶点法线得到了不同的定义。为了明确这个梯度,我们将使用从上面得到的“基本事实”的3维版本。
首先,很像我们将多边形面积分成三角形,我们将被我们的曲面包住的体积分解为一系列四面体。通过引入一个新点,每一个四面体恰好包含我们离散的一个面。比如,这是顶点附近的体积看起来可能的样子:
就像在多边形的情况中的位置不会造成什么影响一样,我们也使用带符号的四面体体积。(你可以证明它吗?)
接下来,对于单个的四面体而言体积梯度表示什么?一个四面体体积的写法是
其中是底面三角形的面积并且是高。然后使用和三角形情况中同样类型的几何推理,我们知道
其中是底面的单位法线。
为了写下曲面内部体积相对于给定顶点的梯度,我们简单地对包含的四面体的梯度求和:
乍一看这个求和不能引导为一个对于的很好的表达式——比如,它使用了底面的法线,它和我们当前曲面的几何几乎没什么关系。然而,记住我们可以将放在任意一个我们想放的位置并且对于仍然可以得到同样的表达式。特别的,当我们直接将放到上时,那么和(分别)表示我们原始曲面中包含点面的法线和面积:
其它的定义
目前为止我们仅仅看到了从一些平滑定义中推导出来的顶点法线定义。这种思考方式刻画了离散微分几何的本质内涵:平滑设定中的关系应该在离散设定中保证不收到干扰(即应该不管在是离散对象还是平滑对象时都是对的。)不过,仍然有大量对于顶点法线公共的定义在平滑世界中没有已知的原始对象。(也许你可以找到一个呢?)
统一加权
可能得到顶点法线最简单的方法是对相邻面的法线求和:
这个方法的主要缺点是同一个几何的两个不同的细分曲面可能得到非常不同的顶点法线,如同上图描绘的一样。
顶角权重
一个减少对于细分曲面依赖的简单方法是对每一个面的法线使用它们对饮的顶角(tip angles)进行加权,即感兴趣顶点处的内角:
球雕刻的多面体
这里有另一个有趣的方式得到顶点法线:考虑球面包含所有中到原点单位距离的点。关于球面一个有意思的事实是在点处的单位法线就是这个点自己!即。所以如果我们开始于一个多面体,它的所有顶点都在球面上,一个定义顶点法线的可解释的方法就是简单的使用这个顶点的坐标。
实际上,这并不是太难证明在顶点处法线的方向可以只使用边向量项表示,其中是紧邻的邻域。特别的,我们有
其中常数可以被忽略因为我们仅仅对法线的方向感兴趣。(对于这个表达式的推导细节,请看Max的“Weights for Computing Vertex Normals from Facet Normals”)当然,由于这个表达式仅仅依赖于边向量它可以被使用砸任何一个网格上(不仅仅是在球中被雕刻出来的)。
这章后面都是练习,内容不翻译了。但是这些练习都很有价值,值得思考。