如何计算插值三角形曲面上的主曲率?

Sal*_*emD 1 c++ opengl math graphics image-processing

给定3D三角形网格中的3个顶点及其法线,我将它们插入到三角形表面上.我想计算该表面中每个点的主曲率k1,k2.

我的代码简要如下:

Vertex v1,v2,v3,v12,p,vp; // Vertex is an structure of x,y,z and some operators
v1 = ...;   v2 = ...;   v3 = ...;
Vertex n1,n2,n3,n12,n;//normals
n1 = ...;   n2 = ...;   n3 = ...;
int interLevels = ceil(sqrt(tArea(v1,v2,v3)));
for (float a=0; a<=1;a+=1.0f/interLevels){
    v12 = v1*a+v2*(1-a);
    n12 = n1*a+n2*(1-a);
    for (float b=0; b<=1;b+=1.0f/interLevels){
        p = v12*b+v3*(1-b);
        n = n12*b+n3*(1-b);
        normalize(n);

        Vertex k1,k2;       

    }
}
Run Code Online (Sandbox Code Playgroud)

我们如何计算k1和k2?是否足以依赖给定的输入,还是应该考虑附近的顶点?

4pi*_*ie0 6

这个问题至少有两种方法

方法1

你可以使用这样一个事实,即主曲率是一个形状算子的特征值- 在两个切线向量上定义的空间上的线性函数.

程序:

1. compute shape operator:
Run Code Online (Sandbox Code Playgroud)

找到两个切线向量,然后计算

在此输入图像描述

你会找到一个矩阵

在此输入图像描述

2. and then the eigenvalues of this matrix are principal curvatures k1, k2
Run Code Online (Sandbox Code Playgroud)

方法2

我们将使用这样的事实,即S给定点处的表面的主曲率是P等式的实域中的根

(EG-F^2)k^2 - (EN-2FM+GL)k + LN-M^2 = 0      (1)
Run Code Online (Sandbox Code Playgroud)

其中k主曲率和系数取自第一和第二基本形式.它们是根据参数方程给出的.要获得这些根,我们将用事实,而不是计算k1,并k2从(1),我们可以找到一个矩阵的特征值A,其中A被定义为

在此输入图像描述

矩阵F1包含第一基本形式的系数

在此输入图像描述

矩阵F2包含第二基本形式的系数

在此输入图像描述