私は現在、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 は、一部
dp = sum( normal(:,E(:,1)) .* normal(:,E(:,2)), 1 );
のサーフェスに対して 75 行目 (" ") でエラーを生成します。このエラーは、 48 行目 (" ")E
によって引き起こされる範囲外のインデックスが含まれていることに起因します。とベクトルが同じ順序付けられたペアを 2 回作成すると問題が発生します。この場合、sparse 関数はその行列の位置に対して 2 つのベクトル要素を一緒に加算し、75 行目のインデックスとして使用するには大きすぎる値になります。たとえば、そしてに等しくなります。A = sparse(double(i),double(j),s,n,n);
A
E
i
j
s
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,:)];
私が言及したエラーは、面マトリックス内の頂点の順序を再配置することにより、1 つの面の表面法線の符号が反転することによって引き起こされることを付け加えたかっただけです。」
私は自分でコードをデバッグしようとしましたが、うまくいきませんでした。ここで誰かが問題を解決したか、または私に洞察を与えることができるかどうか疑問に思っています.選択した少数だけでなく、さまざまな表面の曲率を計算するには、コードが十分に汎用的である必要があります.