У меня есть многоугольник с V
вершинами и n
количеством отверстий. Как я могу создать сетку, используя триангуляцию Делоне для этого многоугольника в MATLAB?
Я знаю, что могу использовать функцию delaunay, но Я не знаю, как ввести дебют.
У меня есть многоугольник с V
вершинами и n
количеством отверстий. Как я могу создать сетку, используя триангуляцию Делоне для этого многоугольника в MATLAB?
Я знаю, что могу использовать функцию delaunay, но Я не знаю, как ввести дебют.
Примечание. Более новые версии MATLAB рекомендуют использовать delaunayTriangulation
класс и связанные с ним методы. Приведенное ниже решение действительно для старых версий и должно быть легко адаптировано к новому классу.
Вы можете использовать функцию DelaunayTri для создания триангуляции Делоне с краями. должен включать границу многоугольника и края проемов. Это создаст триангуляцию, включающую проемы, поэтому вы сможете выбрать только те треугольники, которые находятся «внутри» ограниченной области (то есть в многоугольнике, но не в проемах), используя функцию inOutStatus.
Вот пример квадрата с квадратным отверстием:
x = [0 1 2 3 3 3 3 2 1 0 0 0 1 2 2 1].';
y = [0 0 0 0 1 2 3 3 3 3 2 1 1 1 2 2].';
c = [(1:11).' (2:12).'; 12 1; (13:15).' (14:16).'; 16 13]; % Constrained edges
dt = DelaunayTri(x, y, c); % Create constrained triangulation
isInside = inOutStatus(dt); % Find triangles inside the constrained edges
tri = dt(isInside, :); % Get end point indices of the inner triangles
triplot(tri, x, y); % Plot the inner triangles
hold on;
plot(x(c(1:12, :)), y(c(1:12, :)), 'r', 'LineWidth', 2); % Plot the outer edges
plot(x(c(13:16, :)), y(c(13:16, :)), 'r', 'LineWidth', 2); % Plot the inner edges
axis equal;
axis([-0.5 3.5 -0.5 3.5]);
А вот сюжет, созданный приведенным выше кодом: