2

我有一个从给定网格(形状)获取主曲率的问题。

  1. 我正在尝试使用 Matlab 文件交换中的“patchcurvature”方法。然而,该方法总是给出正曲率。我认为可能是该方法将网格视为单独的补丁,并计算每个补丁的主曲率。[~,~,Dir1,Dir2,PrincipalCurvature1,PrincipalCurvature1]=patchcurvature(meshFaceVertices);

  2. 我还尝试使用 Matlab 文件交换中的另一种方法,称为“surfature”;但是,它计算由表面上的三个二维点阵列定义的“表面”的主曲率。我不知道如何从由顶点和面定义的现有网格创建带有二维点数组的“表面”。有一些方法将表面转换为网格,但不是相反...

任何想法,将不胜感激。非常感谢,新年快乐!!!

最好的,A.

4

3 回答 3

3

如果我没有错过不同的定义,主曲率是在可微分表面上定义的,但网格(通常是三角形的集合)是不可微分的。我可以想象一些可能的方法来近似主曲率。

假设您的网格是通过从可微分表面采样获得的,您需要做的是多项式回归,更具体地说,在您尝试计算曲率的点附近的顶点上进行二次插值。

首先,您需要确定感兴趣点的法线向量。法向量可以通过网格三角形的法线方向( AB × AC ,三角形的两条边的叉积),并与其他一些法向量进行插值得到。

找到法线向量后,您可以变换网格的坐标,使该点位于原点,法线向量指向 z 轴。(具有沿 z 轴旋转角度 theta 的参数)

然后你的下一个目标是找到一个表面

     1 1
z = --- 阿尔法 * x^2 + --- 贝塔 * y^2
     2 2

最接近您的一组点,具有三个参数 alpha、beta 和 theta。

那么 alpha 和 beta 是主成分。

我不确定,但已经有一个 matlab 函数可以为你做这个回归。

于 2013-01-09T11:47:58.163 回答
0

作为 Iyomis 答案的替代方案,它可能对您的问题不太具体,但在一般情况下可能很有用:您可以计算一个切平面,给定具有法线的网格,在给定点投影相邻顶点的法线(或者更好平面法线和相邻法线之间的插值)到该平面上,然后只对结果点使用主成分分析。

好吧,它不完全是主曲率,但它是一个不错的近似值。我相信 pcl ( http://pointclouds.org ) 库使用类似的东西来实现它们的主曲率。

于 2013-02-06T18:46:16.440 回答
0

为什么不按照定义来做,而是去定义。Z 的含义,其中 z 是 XY 的网格网格,用于描述表面高度。

[Fx,Fy] = gradient(Z);

[Fxx,~] = gradient(Fx);

[~,Fyy] = gradient(Fy);

curv_norm=abs(Fxx.*Fyy-Fxy.^2);

normeliztion_size_mat = (1+Fx.^2+Fy.^2).^2;

normelized_size_mat=curv_norm/normelization_size_mat;
于 2016-11-15T14:16:17.367 回答