Documentation

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

isInterior

Query triangles inside Delaunay triangulation

Syntax

tf = isInterior(DT)

Description

tf = isInterior(DT) returns an array of logical values that indicate whether the triangles in a constrained Delaunay triangulation are inside a bounded geometric domain. A bounded domain is a region enclosed by multiple constrained edges that do not intersect or overlap. A triangle, DT.ConnectivityList(j,:), is classified as inside the domain when tf(j) is true. Otherwise, the triangle is outside the domain.

Input Arguments

DT

A 2-D delaunayTriangulation that has a set of constrained edges that define a bounded geometric domain.

Output Arguments

tf

Logical values, returned as a column vector. Element tf(j) is true when the triangle whose ID is j is inside the domain of DT.

Examples

expand all

Create a geometric domain whose shape is a square frame.

outerprofile = [-5 -5; -3 -5; -1 -5;  1 -5; 
                 3 -5;  5 -5;  5 -3;  5 -1; 
                 5  1;  5  3;  5  5;  3  5; 
                 1  5; -1  5; -3  5; -5  5; 
                -5  3; -5  1; -5 -1; -5 -3];

innerprofile = outerprofile.*0.5;
profile = [outerprofile; innerprofile];

Define the edge constraints.

outercons = [(1:19)' (2:20)'; 20 1;];
innercons = [(21:39)' (22:40)'; 40 21];
C = [outercons; innercons];

Create the constrained Delaunay triangulation.

DT = delaunayTriangulation(profile,C);

Plot the triangulation.

figure
subplot(1,2,1)
triplot(DT)  

% Highlight the inner square in red. 
hold on 
plot(DT.Points(innercons',1),DT.Points(innercons',2),...
     '-r','LineWidth',2)  

% Highlight the outer square in red and resize the |x| and |y| axes to make
% the plot square. 
plot(DT.Points(outercons',1),DT.Points(outercons',2), ...
     '-r','LineWidth', 2)
axis equal  

% Plot only the triangles that lie inside of the domain. 
hold off
subplot(1,2,2)
inside = isInterior(DT);
triplot(DT.ConnectivityList(inside, :),DT.Points(:,1),DT.Points(:,2))  

% Highlight the inner and outer squares in red. 
hold on
plot(DT.Points(outercons',1),DT.Points(outercons',2), ...
     '-r','LineWidth', 2)
plot(DT.Points(innercons',1),DT.Points(innercons',2), ...
     '-r','LineWidth', 2)
axis equal
hold off

Definitions

expand all

Tips

  • isInterior can produce incorrect or inconsistent results when boundary constraints intersect or overlap. To avoid this behavior, use constraints that form one or multiple closed boundaries that do not intersect or overlap. When boundary constraints are nested without intersections or overlaps, the inside or outside status alternates across the boundaries.

Was this topic helpful?