4
我已经有了一个3D三角剖分dt
(或者可能是四面体化)的3D点云,我希望找到一个很好的方法从中提取三角形。请注意,我知道如何获得四面体,其简单的dt.ConnectivityList
,是否有一种从四面体中获得三角形的有效方法?每个三角形只能在列表中出现一次。如何从3D Delaunay三角剖分中获得三角形
目前我'做以下 - 这不过是痛苦的缓慢:
dt = delaunayTriangulation([X Y Z]);
tetrahedra = dt.ConnectivityList;
tris = cell(1, size(tetrahedra, 1)); % contains indices of tris in a tetra
for tt=1:size(tetrahedra, 1)
vertIds = tetrahedra(tt, :); % vertex indices
vmask = logical([0 1 1 1]);
tris{tt} = [vertIds(circshift(vmask, [0 0 0 0]));
vertIds(circshift(vmask, [1 1 1 1]));
vertIds(circshift(vmask, [2 2 2 2]));
vertIds(circshift(vmask, [3 3 3 3]))];
end
tris = unique(sort(cell2mat(tris'), 2), 'rows');
不,我看看你在那里使用的任何函数,但是你是否尝试将'tris'声明为一个数组而不是ac数组?我对大循环中的细胞有过“有趣”的体验。 – McMa
@McMa是的,这是一个可能的优化,但是,我仍然需要对每一行进行排序,然后删除模糊。 – brtk