Я бы предложил попробовать встроенную функцию DELAUNAY3 . Пример, приведенный в ссылке на документацию, напоминает ответ Аарона в том смысле, что он использует вершины плюс центральную точку многогранника для создания трехмерной тесселяции Делоне, но shabbychef указывает, что вы все еще может создать тесселяцию, не включая лишнюю точку. Затем вы можете использовать TETRAMESH для визуализации результирующих тетраэдрических элементов.
Ваш код может выглядеть примерно так (при условии, что v
- это N-на-3 матрица значений координат вершины):
v = [v; mean(v)]; %# Add an additional center point, if desired (this code
%# adds the mean of the vertices)
Tes = delaunay3(v(:,1),v(:,2),v(:,3)); %# Create the triangulation
tetramesh(Tes,v); %# Plot the tetrahedrons
Поскольку вы сказали в комментарии, что ваш многогранник выпуклый, вам не нужно беспокоиться об указании поверхностей в качестве ограничений, чтобы выполнить триангуляцию ( shabbychef , кажется, дает более строгий и краткий характер). доказательство этому, чем мои комментарии ниже).
ПРИМЕЧАНИЕ: Согласно документации, DELAUNAY3 будет удален в будущем выпуске, а DelaunayTri эффективно займет свое место (хотя в настоящее время кажется, что определение ограниченных ребер все еще ограничено только двумерные триангуляции). Для полноты картины вы можете использовать DelaunayTri и визуализировать выпуклую оболочку (т.е. многогранную поверхность):
DT = DelaunayTri(v); %# Using the same variable v as above
tetramesh(DT); %# Plot the tetrahedrons
figure; %# Make new figure window
ch = convexHull(DT); %# Get the convex hull
trisurf(ch,v(:,1),v(:,2),v(:,3),'FaceColor','cyan'); %# Plot the convex hull