Volume do casco 3D convexo de pequenos conjuntos de pontos no casco


11

Tenho uma pergunta semelhante à que foi feita anteriormente, exceto em 3D, e só preciso do volume, não da forma real do casco.

Mais precisamente, recebi um pequeno conjunto de pontos (digamos, 10 a 15) em 3D, que são conhecidos por estar no casco convexo do conjunto de pontos (para que todos "importem" e definam o casco). Eu só quero calcular o volume do casco, não me importo em calcular o poliedro real. Existe um algoritmo eficiente para fazer isso?


Você sabe que os pontos são vértices do poliedro. Você conhece os rostos (polígonos no casco)? Nesse caso, você pode calcular o volume com bastante facilidade (como uma soma dos volumes "cone").
hardmath

11
Uma maneira preguiçosa seria triangular primeiro e depois somar os volumes do tetraedro (muito fácil de calcular).
Shuhao Cao 29/07

@hardmath: Não. Eu sei que, se soubesse as facetas, seria fácil.
Victor Liu

@ Shuhao Cao: Existe um algoritmo de triangulação simples para este caso especial? Geralmente, os algoritmos de tetraédrica 3D são bastante complicados e espero resolver esse problema milhares ou milhões de vezes.
Victor Liu

Respostas:


5

Eu ficaria surpreso se você pudesse superar a sugestão de Shuhao Cao: calcule o casco e depois o volume depois de ter uma triangulação do casco. Você pode calcular o casco com o algoritmo incremental ou com o algoritmo de embrulho para presente. Se você realmente deseja um código fácil, basta escrever um loop sobre todos os triângulos possíveis para ver se estão no casco. Para , isso ainda é bastante rápido e você pode implementar facilmente atalhos. Depois de ter todas as faces do triângulo, escolha um vértice faça um tetraedro com cada triângulo e . Seu volume é um determinante nas coordenadas do vértice.n 4 n = 15 v T v 4 × 4O(n2)n4n=15vTv4×4


2

Um pequeno teste no MATLAB, para número de vértices , cada componente é um número aleatório uniforme em :[ 0 , 1 ]N=100[0 0,1 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;

Resultado:

time_elapse =
              0.014807
Vol =
      0.67880219135839

Eu diria que é razoavelmente rápido, se você quiser executá-lo vezes, leva apenas menos de 3 horas. Aqui está o que é:106

convhull

Também quero mencionar que no post do professor O'Rourke ele mencionou o uso de determinante para calcular os volumes do tetraedro, mas aqui eu prefiro usar o produto triplo. É uma operação vetorizada naturalmente, mais escalável que a rotina interna do determinante (ou você pode expandir um determinante manualmente: p). Aqui está outro teste para , o resultado éN = 10 54×4N=105

time_elapse =
              3.244278
Vol =
     0.998068316875714

com número de tetraedros . Observe que o volume total está bem fechado para pois há muitos pontos agrupados em . 1 [ 0 , 1 ] 37×1051 1[0 0,1 1]3


Aliás, o teste é feito no meu antigo Core 2 T61p de 2007.
Shuhao Cao 31/07

2

Das Perguntas frequentes sobre computação poliédrica de Komei Fukuda :

2.23 Existe algum algoritmo eficiente para calcular o volume de um polítopo convexo em ?Rd

Sabe-se que a computação do volume de um politopo V (ou politopo H) é difícil de P, veja [DF88] e [Kha93]. Existem algoritmos aleatoriamente teoricamente eficientes para aproximar o volume de um corpo convexo [LS93], mas nenhuma implementação parece estar disponível. Existe um estudo comparativo [BEF00] de vários algoritmos de computação de volume para pólipos convexos. Indica que não existe um algoritmo único que funcione bem para muitos tipos diferentes de politopos.

[DF88] ME Dyer e AM Frieze. A complexidade de calcular o volume de um poliedro. SIAM J. Comput. 17: 967-974, 1988.

LG Khachiyan. Complexidade do cálculo do volume de politopo. Em J. Pach, editor, New Trends in Discrete and Computational Geometry , páginas 91-101. Springer Verlag, Berlim, 1993.

L. Lovasz e M. Simonovits. Passeios aleatórios em um corpo convexo e um algoritmo de volume aprimorado. Random Structures & Algoritmos , 4: 359-412, 1993.

B. BEeler, A. Enge e K. Fukuda. Cálculo de volume exato para pólipos convexos: um estudo prático. Em G. Kalai e GM Ziegler, editores, Polytopes - Combinatorics and Computation , DMV-Seminar 29, páginas 131-154. Birkhauser, 2000.

Isso pode parecer enterrar as especificidades do problema 3D entre dificuldades de dimensões mais altas, apesar do título do artigo de Dyer and Frieze. De seu resumo: "Mostramos que calcular o volume de um poliedro dado como uma lista de facetas ou como uma lista de vértices é tão difícil quanto calcular a permanente de uma matriz".

Um artigo de 1991 de Jim Lawrence, Polytope Volume Computation , pode ser lido on-line e tem algumas referências para o caso especificamente em 3D. Ele escreve: "O método no presente artigo evita a triangulação de ou de seus limites". Além disso, o algoritmo descrito nesse artigo parece apropriado para sua situação, pois expressa "o volume de como uma soma dos números , um para cada vértice de Esses números são fáceis de calcular, portanto a dificuldade do procedimento é principalmente enumerando os vértices de ". A dificuldade provavelmente se traduz em sua situação em encontrar uma expressão para como a solução de um sistema de desigualdades linearesP N v v P P P P = { x R 3 : A x b }PPNvvPPPP={xR3:UMAxb} .

Se você já conhece essa expressão de "interseção de meios espaços" para , talvez isso permita uma computação bastante rápida.P

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.