给定凸多面体(3D)顶点的位置,我需要计算多面体的质心和体积。以下代码可在Mathworks site获得。计算给定顶点时多面体的质心和体积
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
。
谢谢,但我需要固体多面体的质心! –