Joh*_*ith 6 performance matlab volume polyhedra centroid
给定凸多面体(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
Run Code Online (Sandbox Code Playgroud)
代码很优雅,但速度非常慢.我需要数百次计算数千个多面体的体积和质心.在当前状态下使用此代码是不可行的.有没有人知道更好的方法,或者这个代码可以更快?我可以想到一些微小的变化,例如用mean平均值替换表达式.
您可以将代码加速多少很大程度上取决于您想要如何计算质心。请参阅有关质心计算的答案以了解您的选择。事实证明,如果您需要实心多面体的质心,那么您基本上就不走运了。然而,如果只有多面体的顶点有重量,那么你可以简单地写成
[k,volume] = convhulln(P);
centroid = mean(P(k,:));
Run Code Online (Sandbox Code Playgroud)