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?
algorithms
reference-request
computational-geometry
Victor Liu
fonte
fonte
Respostas:
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) n4 n = 15 v T v 4 × 4
fonte
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 , 1 ]
Resultado:
Eu diria que é razoavelmente rápido, se você quiser executá-lo vezes, leva apenas menos de 3 horas. Aqui está o que é:106
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 × 4 N= 105
com número de tetraedros . Observe que o volume total está bem fechado para pois há muitos pontos agrupados em . 1 [ 0 , 1 ] 3≈ 7 × 105 1 1 [ 0 , 1 ]3
fonte
Das Perguntas frequentes sobre computação poliédrica de Komei Fukuda :
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 }P P Nv v P P P P= { x ∈ R3: A x ≤ b } .
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
fonte