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

时间:2013-11-16 19:23:36

标签: c++ opengl math image-processing graphics

在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 个答案:

答案 0 :(得分:6)

这个问题至少有两种方法

方法1

你可以使用这样的事实:主曲率是shape operator的特征值 - 在两个切向量上定义的空间上的线性函数。

过程:

1. compute shape operator:

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

enter image description here

你会找到一个矩阵

enter image description here

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是主曲率,系数取自第一个&amp;第二种基本形式。它们是根据参数方程给出的。为了获得这些根,我们将使用以下事实:我们可以找到矩阵k1的特征值,而不是从{1}中计算k2A,其中A被定义如

enter image description here

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

enter image description here

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

enter image description here