给定凸多面体 (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
用表达来代替平均值。