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 ]
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
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 ] 3≈ 7 × 1051 1[ 0 , 1 ]3