在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)中计算k1
和k2
,我们可以找到矩阵A
的特征值,其中A
定义为和矩阵
F1
包含第一个基本形式的系数矩阵
F2
包含第二基本形式的系数