凸多面体 (3D) の頂点の位置を考えると、多面体の重心と体積を計算する必要があります。次のコードは、Mathworks サイトで入手できます。
function C = centroid(P)
k=convhulln(P);
if length(unique(k(:)))<size(P,1)
error('Polyhedron is not convex.');
end
T = delaunayn(P);
n = size(T,1);
W = zeros(n,1);
C=0;
for m = 1:n
sp = P(T(m,:),:);
[null,W(m)]=convhulln(sp);
C = C + W(m) * mean(sp);
end
C=C./sum(W);
return
end
コードはエレガントですが、非常に遅いです。何千もの多面体の体積と重心を何百回も計算する必要があります。このコードを現在の状態で使用することは現実的ではありません。誰かがより良いアプローチを知っていますか、またはこのコードをより速くすることができますか? mean
意味の表現に置き換えるなど、私が考えることができるいくつかの小さな変更があります。