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?是否足以依赖给定的输入,还是应该考虑附近的顶点?
这个问题至少有两种方法
你可以使用这样一个事实,即主曲率是一个形状算子的特征值- 在两个切线向量上定义的空间上的线性函数.
程序:
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)
我们将使用这样的事实,即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包含第二基本形式的系数
