Если ваша поверхность, окружающая точки, может быть описана как выпуклый многогранник (то есть как поверхность куба или додекаэдра , без вогнутых ямок или зубчатых заостренных частей ), тогда я бы начал с создания 3-D триангуляции Делоне точек. Это заполнит объем вокруг точек серией тетраэдрических элементов с точками в качестве их вершин, и затем вы можете найти набор треугольных граней, которые образуют внешнюю оболочку объема, используя convexHull
метод класса DelaunayTri
.
Вот пример, который генерирует 200 случайных точек, равномерно распределенных в единичном кубе, создает тетраэдрическую сетку для этих точек, а затем находит трехмерную выпуклую оболочку для объема:
interiorPoints = rand(200,3); %# Generate 200 3-D points
DT = DelaunayTri(interiorPoints); %# Create the tetrahedral mesh
hullFacets = convexHull(DT); %# Find the facets of the convex hull
%# Plot the scattered points:
subplot(2,2,1);
scatter3(interiorPoints(:,1),interiorPoints(:,2),interiorPoints(:,3),'.');
axis equal;
title('Interior points');
%# Plot the tetrahedral mesh:
subplot(2,2,2);
tetramesh(DT);
axis equal;
title('Tetrahedral mesh');
%# Plot the 3-D convex hull:
subplot(2,2,3);
trisurf(hullFacets,DT.X(:,1),DT.X(:,2),DT.X(:,3),'FaceColor','c')
axis equal;
title('Convex hull');
