V
頂点とn
開口部の数を持つポリゴンがあります。MATLABでこのポリゴンのドロネー三角形分割を使用してメッシュを作成するにはどうすればよいですか?
delaunay関数を使用できることは知っていますが、開口部の入力方法がわかりません。
注: MATLABの新しいバージョンでは、delaunayTriangulation
クラスとそれに関連するメソッドを使用することをお勧めします。以下の解決策は古いバージョンに有効であり、新しいクラスに簡単に適応できるはずです。
関数DelaunayTriを使用して、ポリゴンの境界と開口部のエッジを含むようにエッジを制約したDelaunay三角形分割を作成できます。これにより、開口部を含む三角形分割が作成されるため、関数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]);
そして、これが上記のコードによって作成されたプロットです: