将Delaunay三角转换为体积

时间:2018-10-05 09:04:06

标签: matlab geometry computational-geometry

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

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

如何从三角剖分转换为3D垫?

我正在考虑也许测试一堆查询点,并弄清它们是否位于三角形/四面体中,但是我不知道这样做的最佳方法:

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);

1 个答案:

答案 0 :(得分:0)

我想我明白了:

vi = nearestNeighbor(DT,pq);

可能是

vi = pointLocation(DT,pq);

当不包含点时,它将返回nan:

无论如何,由于我不确定我的解决方案是否最佳,因此暂时关闭它。

而且,这在计算上有些敏感。