将 Delaunay 三角剖分转换为体积

Convert Delaunay Trinagulation to Volume

我正在尝试从点云到体积(3D 立方体)。

通过 delaunay 三角剖分,我可以很好地表示体积。

如何从三角测量到 3D 垫?

我想也许可以测试一堆查询点并弄清楚它们是否位于 triangle/tetrahedron 内,但我想不出最好的方法:

clc; clear all;
% Build a cube, in my target application this going to be from a point cloud
d = [-1 1];
[x,y,z] = meshgrid(d,d,d); % a cube
x = [x(:);0];
y = [y(:);0];
z = [z(:);0];
DT = delaunayTriangulation(x,y,z);
V=ones(size(x),'like',x);
%Build a volume from these points?
n=5;samples=linspace(-2,2);
[xq,yq,zq]=meshgrid(samples,samples,samples);
pq=[xq(:),yq(:),zq(:)];
vi = nearestNeighbor(DT,pq);
res=reshape(vi,size(xq));
%As expected, edges are messed up, not a cube...
imagesc(res(:,:,round(end/2)));
% %tetramesh(DT);

我想我明白了:

vi = nearestNeighbor(DT,pq);

可能是

vi = pointLocation(DT,pq);

这个 returns nan 当点没有被包围时:

无论如何,暂时搁置它,因为我不确定我的解决方案是否最优。

此外,这在计算上有些繁琐。