我正在尝试从点云过渡到一个体积(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);
答案 0 :(得分:0)
我想我明白了:
vi = nearestNeighbor(DT,pq);
可能是
vi = pointLocation(DT,pq);
当不包含点时,它将返回nan:
无论如何,由于我不确定我的解决方案是否最佳,因此暂时关闭它。
而且,这在计算上有些敏感。