给定一个凸多面体(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
。