除了3D之外,我有一个与之前提出的问题类似的问题,我只需要体积而不是船体的实际形状。
更精确地讲,我在3D中得到了一小部分点(例如10-15),已知所有这些点都位于点集的凸包上(因此它们都“重要”并定义了壳)。我只想计算船体的体积,我不在乎计算实际的多面体。有一种有效的算法可以做到这一点吗?
除了3D之外,我有一个与之前提出的问题类似的问题,我只需要体积而不是船体的实际形状。
更精确地讲,我在3D中得到了一小部分点(例如10-15),已知所有这些点都位于点集的凸包上(因此它们都“重要”并定义了壳)。我只想计算船体的体积,我不在乎计算实际的多面体。有一种有效的算法可以做到这一点吗?
Answers:
一个小的测试在MATLAB,为顶点的数目,每个组件是在一个均匀随机数[ 0 ,1 ]:
N = 100;
p=rand(N,3);
tic;
T = delaunayTri(p(:,1),p(:,2),p(:,3));
t = T.Triangulation;
e1 = p(t(:,2),:)-p(t(:,1),:);
e2 = p(t(:,3),:)-p(t(:,1),:);
e3 = p(t(:,4),:)-p(t(:,1),:);
V = abs(dot(cross(e1,e2,2),e3,2))/6;
Vol = sum(V);
time_elapse = toc;
结果:
time_elapse =
0.014807
Vol =
0.67880219135839
我想说这是相当快的,如果您想运行次,则只需不到3个小时。这是什么样的:
time_elapse =
3.244278
Vol =
0.998068316875714
摘自Komei Fukuda的多面计算常见问题解答:
众所周知,计算V型多态性(或H型多态性)的体积是#P困难的,请参见[DF88]和[Kha93]。有理论上有效的随机算法来近似凸体的体积[LS93],但似乎没有可用的实现方法。对凸多面体的各种体积计算算法进行了比较研究[BEF00]。这表明没有一种算法可以很好地适用于许多不同类型的多表位。
[DF88] ME Dyer和AM Frieze。计算多面体的体积的复杂性。SIAM J.计算。,1988:17:967-974。
[Kha93] LG Khachiyan。多面体体积计算的复杂性。在J. Pach(《离散和计算几何的新趋势》,第91-101页)的编辑中。柏林,Springer Verlag,1993年。
[LS93] L. Lovasz和M. Simonovits。随机游走在凸体中,并改进了体积算法。 随机结构与算法,4:359-412,1993。
[BEF00] B. Bueler,A。Enge和K. Fukuda。凸多面体的精确体积计算:一项实际研究。在G. Kalai和GM Ziegler中,《多面体-组合与计算》的编辑,DMV研讨会29,第131-154页。Birkhauser,2000年。
尽管Dyer和Frieze论文的标题如此,这似乎将3D问题的细节掩埋在更高维度的难题之中。从他们的摘要中可以得出:“我们表明,计算以面列表或顶点列表形式给出的多面体的体积与计算矩阵的永久性一样困难。”