MATLAB: Creare Delaunay Triangolazione con apertura
Domanda
Ho un poligono con vertici V
e il numero di aperture n
. Come posso creare una mesh usando la triangolazione Delaunay per questo poligono in MATLAB?
So che posso utilizzare il Delaunay funzione, ma non so come inserire l'apertura.
Soluzione
Nota: Le nuove versioni di MATLAB consiglia di utilizzare il class delaunayTriangulation
e dei suoi metodi associati. La soluzione qui di seguito è valida per le versioni più vecchie, e dovrebbe essere facile per adattarsi alla nuova classe.
È possibile utilizzare la funzione DelaunayTri per creare una triangolazione Delaunay con i bordi vincolate per includere il confine del poligono ed i bordi delle aperture. Questo creerà una triangolazione che comprende le aperture, in modo da poter selezionare solo quei triangoli che sono "dentro" la regione limitata (vale a dire nel poligono, ma non nelle aperture) utilizzando la funzione di inOutStatus .
Ecco un esempio di un quadrato con un foro quadrato:
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]);
Ed ecco la trama creata dal codice di cui sopra: