在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;

    }
}

我们如何计算k1和k2?
仅仅依靠给定的输入就足够了吗,还是我应该考虑附近的顶点?

最佳答案

至少有两种方法可以解决此问题

方法1

您可以使用以下事实:主曲率是shape operator的特征值-ojit_a在其两个切 vector 上定义的空间上的线性函数。

程序:

1. compute shape operator:

找到两个切 vector ,然后计算

你会发现一个矩阵
2. and then the eigenvalues of this matrix are principal curvatures k1, k2

方法2

我们将利用以下事实:给定点S上的表面P的主曲率是等式的实域的根
(EG-F^2)k^2 - (EN-2FM+GL)k + LN-M^2 = 0      (1)

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

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

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

08-16 13:49