Matlab: Créer Delaunay Triangulation avec ouverture
La solution
Remarque: Les nouvelles versions de Matlab vous recommandons d'utiliser la balise classe delaunayTriangulation
et ses méthodes associées. La solution ci-dessous est valable pour les versions plus anciennes, et devrait être facile à adapter à la nouvelle classe.
Vous pouvez utiliser la fonction DelaunayTri pour créer une triangulation de Delaunay avec les bords contraints d'inclure la limite du polygone et les bords des ouvertures. Cela va créer une triangulation qui comprend les ouvertures, de sorte que vous pouvez alors sélectionner uniquement les triangles qui sont « à l'intérieur » de la région délimitée (par exemple dans le polygone, mais pas dans les ouvertures) en utilisant la fonction inOutStatus .
Voici un exemple d'un carré avec un trou carré:
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]);
Et voici l'intrigue créée par le code ci-dessus: