在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? 是否足以依赖给定的输入,还是应该考虑附近的顶点?
答案 0 :(得分:6)
这个问题至少有两种方法
你可以使用这样的事实:主曲率是shape operator的特征值 - 在两个切向量上定义的空间上的线性函数。
过程:
1. compute shape operator:
找到两个切线向量,然后计算
你会找到一个矩阵
2. and then the eigenvalues of this matrix are principal curvatures k1, k2
我们将使用这样一个事实,即给定点S
处的曲面P
的主曲率是等式的实域中的根
(EG-F^2)k^2 - (EN-2FM+GL)k + LN-M^2 = 0 (1)
其中k
是主曲率,系数取自第一个&amp;第二种基本形式。它们是根据参数方程给出的。为了获得这些根,我们将使用以下事实:我们可以找到矩阵k1
的特征值,而不是从{1}中计算k2
和A
,其中A
被定义如
和矩阵F1
包含第一个基本形式的系数
矩阵F2
包含第二种基本形式的系数