计算网格三角形主曲率的最简单方法是什么?


19

我有一个网格,在每个三角形周围的区域中,我想计算主曲率方向的估计值。我以前从未做过这种事情,而Wikipedia并没有太大帮助。您能描述或指出一个简单的算法来帮助我计算此估算吗?

假设我知道所有顶点的位置和法线。

Answers:


24

当我需要估计皮肤着色器的网格曲率时,最终确定的算法是:

首先,我为网格中的每个边计算了标量曲率。如果边缘的位置为p1,p2且法线为n1,n2,则我估计其曲率为:

curvature=(n2n1)(p2p1)|p2p1|2

这将计算沿边缘投影的法线差异,作为边缘长度的一部分。(有关我如何提出此公式的信息,请参见下文。)

然后,对于每个顶点,我查看了所有与其接触的边的曲率。在我的情况下,我只想对“平均曲率”进行标量估计,因此我最终采用了每个顶点处所有边缘曲率的绝对值的几何平均值。对于您的情况,您可能会找到最小和最大曲率,然后将这些边作为主曲率方向(也许使用顶点法线对其进行正交化)。有点粗糙,但是对于您想做的事情可能会给您足够好的结果。


该公式的动机是研究将2D应用于圆后会发生什么:

曲率公式应用于圆上的两个点

假设您有一个半径为的圆(因此其曲率是),并且在圆上有两个点,其法线为。这些点相对于圆心的位置将为和,这是因为圆或球体的法线始终始终直接指向圆心。rn 1n 2 p 1 = r n 1 p 2 = r n 21/rn1,n2p1=rn1p2=rn2

因此,可以将半径恢复为或。但是通常,顶点位置不会相对于圆心。我们可以通过减去两个来解决此问题: | p 2 | / | n 2 | p 2p 1[R=|p1个|/|ñ1个||p2|/|ñ2|

p2p1=rn2rn1=r(n2n1)r=|p2p1||n2n1|curvature=1r=|n2n1||p2p1|

结果仅适用于圆和球。但是,我们可以对其进行扩展以使其更加“宽容”,并在任意3D网格上使用它,并且看起来效果还不错。通过首先将向量投影到边缘的方向上,可以使公式更加“宽容” 。这允许这两个向量不完全平行(就像在圆形情况下一样)。我们将投影掉所有不并行的组件。我们可以使用标准化的边缘向量进行点缀: p 2p 1 曲率n2n1p2p1

curvature=(n2n1)normalize(p2p1)|p2p1|=(n2n1)(p2-p1个/|p2-p1个||p2-p1个|=ñ2-ñ1个p2-p1个|p2-p1个|2

等等,这个答案的顶部出现了公式。顺便说一句,使用带符号的投影(点积)的一个不错的好处是该公式可以给出带符号的曲率:凸面为正,凹面为负。


我可以想象使用但尚未尝试的另一种方法是估计每个顶点处表面的第二种基本形式。可以通过在顶点处设置切线基础,然后将所有相邻顶点转换为该切线空间,并使用最小二乘法找到最合适的2FF矩阵来完成此操作。然后,主曲率方向将是该矩阵的特征向量。这似乎很有趣,因为它可以让您找到相邻顶点“隐含”的曲率方向,而没有任何边沿明确指向这些方向,但是另一方面,它需要更多的代码,更多的计算,并且可能在数值上更不可靠。

采用这种方法的论文是Rusinkiewicz,“估计三角形网格上的曲率及其导数”。它通过估算每个三角形的最佳拟合2FF矩阵,然后对每个顶点的矩阵求平均来工作(类似于计算平滑法线的方式)。


1
仅供参考,如果那很重要,我在这里使用了您的答案blender.stackexchange.com/questions/146819/…,但是使用围绕p1的角度添加了权重。不知道您是否觉得有价值?无论如何,请随时发表评论。谢谢。
柠檬

19

只是为出色的@NathanReed答案添加了另一种方法,您可以使用均值和高斯曲率,这可以通过离散的Laplace-Beltrami获得。

v一世

                                         在此处输入图片说明

一种v一世1个3vĴ

Fv一世

Δ小号Fv一世=1个2一种v一世vĴñ1个v一世CØŤα一世Ĵ+CØŤβ一世ĴFvĴ-Fv一世

vĴñ1个v一世v一世

v

H=1个2||Δ小号v||

θĴ

                                        在此处输入图片说明

高斯曲率是:

ķ=2π-ĴθĴ/一种

经过所有这些痛苦之后,主要的离散曲率由下式给出:

ķ1个=H+H2-ķ    ķ2=H-H2-ķ

如果您对此主题感兴趣(并添加一些对这篇文章的参考),那么最好的阅读方法是: 三角2-歧管的离散微分几何算子 [Meyer等。2003]。

对于图像,我感谢我的前教授尼洛伊·米特拉(Niloy Mitra)。


这两个答案都很好,我很难选择。由于我已经问过最简单的方法,所以我认为内森很轻松。
2015年

2
ķ=π-ĴθĴ/一种一世XËd

@teodron也许您对边界顶点的平均曲率有任何见解?可以定义这样的事情吗?
Museful

v一世

-1

@ Nathan-Reed:对Nathan-Reed的回答只是一个问题:为什么使用几何均值?那是因为它是按照高斯曲率“建模”的吗?


3
如果您有新问题,请单击“ 提问”按钮提问。如果它有助于提供上下文,请包括指向该问题的链接。- 点评来源
Dragonseel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.