МАТЛАБ:Создайте триангуляцию Делоне с открытием

StackOverflow https://stackoverflow.com/questions/1700522

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть многоугольник с V вершины и n количество отверстий.Как я могу создать сетку, используя триангуляцию Делоне для этого многоугольника в MATLAB?

Я знаю, что могу использовать Делоне функция, но я не знаю, как ввести отверстие.

Это было полезно?

Решение

Примечание: Более новые версии MATLAB рекомендуют использовать delaunayTriangulation сорт и связанные с ним методы.Приведенное ниже решение справедливо для старых версий и его можно легко адаптировать к новому классу.


Вы можете использовать функцию ДелонеТри для создания триангуляции Делоне, края которой ограничены границей многоугольника и краями отверстий.Это создаст триангуляцию, включающую отверстия, поэтому вы сможете выбрать только те треугольники, которые находятся «внутри» ограниченной области (т. е.в полигоне, а не в проемах) с помощью функции 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]);

А вот график, созданный приведенным выше кодом:

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top