Il volume dello scafo convesso 3D del piccolo punto imposta tutto sullo scafo


11

Ho una domanda simile a questa prima, tranne che in 3D, e ho solo bisogno del volume, non della forma reale dello scafo.

Più precisamente, mi viene data una piccola serie di punti (diciamo, 10-15) in 3D, tutti noti per trovarsi sullo scafo convesso della serie di punti (quindi tutti "contano" e definiscono lo scafo). Voglio solo calcolare il volume dello scafo, non mi interessa calcolare il poliedro reale. Esiste un algoritmo efficiente per farlo?


Sai che i punti sono vertici del poliedro. Conosci le facce (poligoni sullo scafo)? In tal caso è possibile calcolare il volume piuttosto facilmente (come somma dei volumi "a cono").
Hardmath,

1
Un modo pigro sarebbe innanzitutto triangolare, quindi sommare i volumi del tetraedro (molto facile da calcolare).
Shuhao Cao,

@hardmath: No. So che se conoscessi le sfaccettature sarebbe facile.
Victor Liu,

@Shuhao Cao: esiste un semplice algoritmo di triangolazione per questo caso speciale? Generalmente gli algoritmi di tetraedralizzazione 3D sono piuttosto complicati e mi aspetto di dover risolvere questo problema migliaia o milioni di volte.
Victor Liu,

Risposte:


5

Sarei sorpreso se riuscissi a battere il suggerimento di Shuhao Cao: calcola lo scafo e poi il volume una volta che hai una triangolazione dello scafo. È possibile calcolare lo scafo con l' algoritmo incrementale o con l'algoritmo di confezione regalo. Se vuoi davvero un codice semplice, puoi semplicemente scrivere un ciclo n 4 su tutti i triangoli possibili per vedere se sono sullo scafo. Per n = 15 , questo è ancora piuttosto veloce e puoi facilmente implementare scorciatoie. Una volta che hai tutte le facce del triangolo, scegli un vertice v e crea un tetraedro con ogni triangolo T e v . Il suo volume è di 4 ×O(n2)n4n=15vTv determinante nelle coordinate del vertice.4×4


2

Un piccolo test in MATLAB, per numero di vertice , ogni componente è un numero casuale uniforme in [ 0 , 1 ] :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;

Risultato:

time_elapse =
              0.014807
Vol =
      0.67880219135839

Direi che è abbastanza veloce, se vuoi eseguirlo volte, ci vogliono solo meno di 3 ore. Ecco com'è:106

convhull

4×4N=105

time_elapse =
              3.244278
Vol =
     0.998068316875714

7×1051[0,1]3


A proposito, il test è stato eseguito sul mio vecchio Core 2 T61p del 2007.
Shuhao Cao,

2

Dalle domande frequenti sul calcolo poliedrico di Komei Fukuda :

Rd

È noto che calcolare il volume di un V-polytope (o H-polytope) è # P-hard, vedere [DF88] e [Kha93]. Esistono algoritmi randomizzati teoricamente efficienti per approssimare il volume di un corpo convesso [LS93] ma nessuna implementazione sembra essere disponibile. Esiste uno studio comparativo [BEF00] di vari algoritmi di calcolo del volume per polipropi convessi. Indica che non esiste un singolo algoritmo che funzioni bene per molti diversi tipi di polipropi.

[DF88] ME Dyer e AM Frieze. La complessità del calcolo del volume di un poliedro. SIAM J. Comput. , 17: 967-974, 1988.

[Kha93] LG Khachiyan. Complessità del calcolo del volume di polytope. In J. Pach, editore, Nuove tendenze in geometria discreta e computazionale , pagine 91-101. Springer Verlag, Berlino, 1993.

[LS93] L. Lovasz e M. Simonovits. Camminate casuali in un corpo convesso e un algoritmo di volume migliorato. Strutture e algoritmi casuali , 4: 359-412, 1993.

[BEF00] B. Bueler, A. Enge e K. Fukuda. Calcolo del volume esatto per polipropilene convesso: uno studio pratico. In G. Kalai e GM Ziegler, editori, Polytopes - Combinatorics and Computation , DMV-Seminar 29, pagg. 131-154. Birkhauser, 2000.

Ciò potrebbe sembrare seppellire i dettagli del problema 3D tra le difficoltà di dimensioni più elevate, nonostante il titolo del documento Dyer e Frieze. Dal loro abstract: "Mostriamo che calcolare il volume di un poliedro dato come un elenco di sfaccettature o come un elenco di vertici è difficile come calcolare il permanente di una matrice".

PPNvvPPPP={XR3:UNXB}

P

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.