Volume de coque convexe 3D de petits ensembles de points tout sur la coque

11

J'ai une question similaire à celle posée auparavant sauf en 3D, et je n'ai besoin que du volume, pas de la forme réelle de la coque.

Plus précisément, on me donne un petit ensemble de points (disons, 10-15) en 3D, qui sont tous connus pour se situer sur la coque convexe de l'ensemble de points (donc ils "importent" tous et définissent la coque). Je veux seulement calculer le volume de la coque, je me fiche du calcul du polyèdre réel. Existe-t-il un algorithme efficace pour ce faire?

Victor Liu
la source
Vous savez que les points sont des sommets du polyèdre. Connaissez-vous les faces (polygones sur la coque)? Si c'est le cas, vous pouvez calculer le volume assez facilement (comme une somme de volumes "coniques").
hardmath
1
Une manière paresseuse serait de trianguler d'abord, puis d'additionner les volumes des tétraèdres (très faciles à calculer).
Shuhao Cao
@hardmath: Non. Je sais que si je connaissais les formes des facettes, ce serait facile.
Victor Liu
@Shuhao Cao: Existe-t-il un algorithme de triangulation simple pour ce cas particulier? Généralement, les algorithmes de tétraédrique 3D sont assez compliqués, et je m'attends à devoir résoudre ce problème des milliers ou des millions de fois.
Victor Liu

Réponses:

5

O(n2)n4n=15vTv4×4

Joseph O'Rourke
la source
2

N=100[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;

Résultat:

time_elapse =
              0.014807
Vol =
      0.67880219135839

106

convoi

4×4N=105

time_elapse =
              3.244278
Vol =
     0.998068316875714

7×1051[0,1]3

Shuhao Cao
la source
BTW le test est fait sur mon ancien Core 2 T61p 2007.
Shuhao Cao
2

De la FAQ sur le calcul polyédrique de Komei Fukuda :

Rd

Il est connu que le calcul du volume d'un polytope V (ou polytope H) est # P-difficile, voir [DF88] et [Kha93]. Il existe des algorithmes randomisés théoriquement efficaces pour approximer le volume d'un corps convexe [LS93] mais aucune implémentation ne semble être disponible. Il existe une étude comparative [BEF00] de divers algorithmes de calcul de volume pour les polytopes convexes. Cela indique qu'il n'y a pas d'algorithme unique qui fonctionne bien pour de nombreux types de polytopes différents.

[DF88] ME Dyer et AM Frieze. La complexité du calcul du volume d'un polyèdre. SIAM J. Comput. , 17: 967-974, 1988.

[Kha93] LG Khachiyan. Complexité du calcul du volume des polytopes. Dans J. Pach, éditeur, New Trends in Discrete and Computational Geometry , pages 91-101. Springer Verlag, Berlin, 1993.

[LS93] L. Lovasz et M. Simonovits. Marches aléatoires dans un corps convexe et un algorithme de volume amélioré. Structures et algorithmes aléatoires , 4: 359-412, 1993.

[BEF00] B. Bueler, A. Enge et K. Fukuda. Calcul du volume exact pour les polytopes convexes: une étude pratique. Dans G. Kalai et GM Ziegler, éditeurs, Polytopes - Combinatorics and Computation , DMV-Seminar 29, pages 131-154. Birkhauser, 2000.

Cela peut sembler enterrer les spécificités du problème 3D parmi les difficultés de dimensions supérieures, malgré le titre du papier Dyer et Frieze. De leur résumé: "Nous montrons que calculer le volume d'un polyèdre donné soit comme une liste de facettes ou comme une liste de sommets est aussi difficile que de calculer le permanent d'une matrice."

PPNvvPPPP={xR3:Axb}

P

hardmath
la source