我目前正在使用 Matlab File Exchange 上的 Toolbox Graph 来计算 3D 曲面上的曲率,并发现它们非常有用 ( http://www.mathworks.com/matlabcentral/fileexchange/5355 )。但是,对于某些表面描述,在“compute_curvature”中会发出以下错误消息,并且代码无法完全运行:
> Error in ==> compute_curvature_mod at 75
> dp = sum( normal(:,E(:,1)) .* normal(:,E(:,2)), 1 );
> ??? Index exceeds matrix dimensions.
这种情况只是偶尔发生,但没有明显的理由说明工具箱对某些表面工作得非常好,而对其他表面(具有类似拓扑)则不然。我还注意到早在 2009 年 11 月就有人在 File Exchange 上询问过这个错误,但这个问题没有得到解答。该帖子称
“compute_curvature 将在第 75 行 ("
dp = sum( normal(:,E(:,1)) .* normal(:,E(:,2)), 1 );
") 上为某些曲面生成错误。该错误源于E
包含超出范围的索引,这是由第 48 行 ("A = sparse(double(i),double(j),s,n,n);
") 引起的,其中A
的值最终完全构成了E
矩阵。当i
和j
向量两次创建相同的有序对时会出现问题,在这种情况下,稀疏函数将两个s
向量元素相加到该矩阵位置,导致值太大而无法用作第 75 行的索引。例如,如果i = [1 1]
然后将等于。j = [2 2]
_s = [3 4]
A(1,2)
3 + 4 = 7
i
和j
向量在这里创建:
i = [face(1,:) face(2,:) face(3,:)];
j = [face(2,:) face(3,:) face(1,:)];
只是想补充一下,我提到的错误是通过重新排列面矩阵中顶点的顺序来翻转一个面的表面法线的符号引起的”
我曾尝试自己调试代码,但没有任何运气。我想知道这里是否有人解决了这个问题或者能给我一些见解——我需要代码足够通用,以便计算各种曲面的曲率,而不仅仅是少数几个曲面。