【问题标题】:How to calculate principal curvature over interpolated triangular surface?如何计算插值三角形曲面上的主曲率?
【发布时间】:2013-11-16 19:23:35
【问题描述】:

给定 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? 依赖给定的输入就足够了吗,还是应该考虑附近的顶点?

【问题讨论】:

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


    【解决方案1】:

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

    方法 1

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

    程序:

    1. compute shape operator:
    

    求两个切向量,然后计算

    你会发现一个矩阵

    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 包含第二基本形式的系数

    【讨论】:

    • 感谢您的链接,我会阅读更多相关内容并尝试实施。
    • 如果我能在实施中获得更多帮助,那就太好了:)
    • 你必须选择任意两个切向量并为 S 矩阵求解方程 1) 或通过从第一和第二基本形式(对于 e、f、... ,F,G 系数)
    • 我可以粘贴完整的解决方案,但请更具体地说明您的变量在微分几何方面的含义
    • 这段代码位于一个循环中,该循环遍历某个三角对象的所有表面。 v1 v2 v3 是每个三角形的顶点,它们的法线是 n1 n2 n3。在每个表面上,我想找到满足特定条件的特定点,这些条件取决于主曲率。
    猜你喜欢
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多