小编use*_*144的帖子

在Matlab中的Toolbox Graph中纠正compute_curvature.m错误

我目前正在使用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矩阵.当ij向量创建两次相同的有序对时会出现问题,在这种情况下,稀疏函数将两个s向量元素一起添加到该矩阵位置,从而导致值太大而无法用作第75行的索引.例如,如果i = [1 1]j = [2 2]s = [3 4]随后A(1,2)将等于3 + 4 = 7.

ij向量这里创建: …

matlab

5
推荐指数
1
解决办法
759
查看次数

标签 统计

matlab ×1