Question

J'ai un polygone dont les sommets de V et le numéro de n des ouvertures. Comment puis-je créer un maillage en utilisant la triangulation de Delaunay pour ce polygone en Matlab?

Je sais que je peux utiliser le delaunay fonction, mais je ne sais pas comment entrer l'ouverture.

Était-ce utile?

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:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top