給定凸多面體(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
。
謝謝,但我需要固體多面體的質心! –