我目前正在使用Matlab文件交换中的工具箱图来计算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.
Run Code Online (Sandbox Code Playgroud)
这种情况只会偶尔发生,但没有明显的理由说明为什么工具箱对某些表面完全正常,而对其他表面(类似拓扑结构)则无效.我还注意到有人在2009年11月的文件交换中询问了这个错误,但问题没有得到解决.帖子说
"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向量这里创建: …
matlab ×1