【发布时间】:2017-12-10 01:34:19
【问题描述】:
我目前正在使用 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's 值最终完全构成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,:)];只是想补充一下,我提到的错误是由 翻转一个面的表面法线的符号 重新排列人脸矩阵中顶点的顺序"
我已经尝试自己调试代码,但没有任何运气。我想知道这里是否有人解决了这个问题或能给我一些见解——我需要代码足够通用,以便计算各种曲面的曲率,而不仅仅是少数几个曲面。
【问题讨论】:
-
您尝试过给作者发电子邮件吗? gabriel.peyre 'at' ceremade.dauphine.fr
-
我做到了,正在等待回音。但是我想对冲 Stack Overflow 上的赌注。
标签: matlab