exponenta event banner

вписанный многоугольник

Точки, расположенные внутри или на краю полигональной области

Описание

пример

in = inpolygon(xq,yq,xv,yv) прибыль in указывает, указаны ли точки запроса xq и yq находятся внутри или на краю полигональной области, определяемой xv и yv.

пример

[in,on] = inpolygon(xq,yq,xv,yv) также возвращает on указывает, находятся ли точки запроса на краю полигональной области.

Примеры

свернуть все

Определите пятиугольник и набор точек. Затем определите, какие точки лежат внутри (или на краю) пятиугольника.

Определите координаты x и y вершин многоугольника для создания пятиугольника.

L = linspace(0,2*pi,6);
xv = cos(L)';
yv = sin(L)';

Определите координаты x и y 250 точек случайного запроса. Инициализируйте генератор случайных чисел для вывода randn повторяемость.

rng default
xq = randn(250,1);
yq = randn(250,1);

Определите, лежит ли каждая точка внутри или на кромке полигональной области. Также определите, лежит ли какая-либо из точек на кромке полигональной области.

[in,on] = inpolygon(xq,yq,xv,yv);

Определите количество точек, лежащих внутри или на краю полигональной области.

numel(xq(in))
ans = 80

Определите количество точек, лежащих на кромке полигональной области.

numel(xq(on))
ans = 0

Поскольку нет точек, лежащих на краю области многоугольника, все 80 точек идентифицируются xq(in), yq(in) строго внутри полигона.

Определите количество точек, лежащих вне области многоугольника (не внутри или на ребре).

numel(xq(~in))
ans = 170

Постройте график полигона и точек запроса. Отобразите точки внутри многоугольника красным плюсом. Отобразите точки вне многоугольника синим кругом.

figure

plot(xv,yv) % polygon
axis equal

hold on
plot(xq(in),yq(in),'r+') % points inside
plot(xq(~in),yq(~in),'bo') % points outside
hold off

Figure contains an axes. The axes contains 3 objects of type line.

Найдите точки внутри квадрата с квадратным отверстием.

Определите квадратную область с квадратным отверстием. Задайте вершины внешнего контура в направлении против часовой стрелки и задайте вершины для внутреннего контура в направлении по часовой стрелке. Использовать NaN для разделения координат внешнего и внутреннего контуров.

xv = [1 4 4 1 1 NaN 2 2 3 3 2];
yv = [1 1 4 4 1 NaN 2 3 3 2 2];

Определите координаты x и y 500 случайных точек. Инициализируйте генератор случайных чисел для вывода randn повторяемость.

rng default
xq = rand(500,1)*5;
yq = rand(500,1)*5;

Определите, лежит ли каждая точка внутри или на кромке полигональной области.

in = inpolygon(xq,yq,xv,yv);

Постройте график полигона и точек запроса. Отобразите точки внутри многоугольника красным плюсом. Отобразите точки вне многоугольника синим кругом.

figure

plot(xv,yv,'LineWidth',2) % polygon
axis equal

hold on
plot(xq(in),yq(in),'r+') % points inside
plot(xq(~in),yq(~in),'bo') % points outside
hold off

Figure contains an axes. The axes contains 3 objects of type line.

Точки запроса в квадратном отверстии находятся вне полигона.

Определите координаты x и y для пентаграммы.

xv = [0.5;0.2;1.0;0;0.8;0.5];
yv = [1.0;0.1;0.7;0.7;0.1;1];

Определите координаты x и y 12 точек запроса.

xq = [0.1;0.5;0.9;0.2;0.4;0.5;0.5;0.9;0.6;0.8;0.7;0.2];
yq = [0.4;0.6;0.9;0.7;0.3;0.8;0.2;0.4;0.4;0.6;0.2;0.6];

Определите, лежит ли каждая точка внутри или на кромке полигональной области. Также определите, лежит ли какая-либо из точек на кромке полигональной области.

[in,on] = inpolygon(xq,yq,xv,yv);

Определите количество точек, лежащих внутри или на краю полигональной области.

numel(xq(in))
ans = 8

Определите количество точек, лежащих на кромке полигональной области.

numel(xq(on))
ans = 2

Определите количество точек, лежащих вне области многоугольника (не внутри или на ребре).

numel(xq(~in))
ans = 4

Постройте график многоугольника и точек. Отображение точек строго внутри многоугольника с красным плюсом. Отобразите точки на ребре черной звездочкой. Отобразите точки вне многоугольника синим кругом.

figure

plot(xv,yv) % polygon

hold on
plot(xq(in&~on),yq(in&~on),'r+') % points strictly inside
plot(xq(on),yq(on),'k*') % points on edge
plot(xq(~in),yq(~in),'bo') % points outside
hold off

Figure contains an axes. The axes contains 4 objects of type line.

Шесть точек лежат внутри многоугольника. Две точки лежат на кромке многоугольника. Четыре точки лежат вне многоугольника.

Входные аргументы

свернуть все

x-координаты точек запроса, заданные как скаляр, вектор, матрица или многомерный массив.

Размер xq должен соответствовать размеру yq.

Типы данных: double | single

y - координаты точек запроса, заданные как скаляр, вектор, матрица или многомерный массив.

Размер yq должен соответствовать размеру xq.

Типы данных: double | single

x - координаты вершин многоугольника, заданные как вектор.

Размер xv должен соответствовать размеру yv.

Чтобы задать вершины множительно соединенных или непересекающихся многоугольников, разделите координаты отдельных контуров на NaN. Кроме того, для множительных соединенных многоугольников необходимо ориентировать вершины для внешних и внутренних контуров в противоположных направлениях.

Многоугольник не может быть самопересекающимся и кратно связанным из-за неоднозначности, связанной с самопересечениями и ориентациями контура.

Типы данных: double | single

y - координаты вершин многоугольника, заданные как вектор.

Размер yv должен соответствовать размеру xv.

Чтобы задать вершины множительно соединенных или непересекающихся многоугольников, разделите координаты отдельных контуров на NaN. Кроме того, для множительных соединенных многоугольников необходимо ориентировать вершины для внешних и внутренних контуров в противоположных направлениях.

Многоугольник не может быть самопересекающимся и кратно связанным из-за неоднозначности, связанной с самопересечениями и ориентациями контура.

Типы данных: double | single

Выходные аргументы

свернуть все

Индикатор для точек внутри или на краю полигональной области, возвращаемый в виде логического массива. in имеет тот же размер, что и xq и yq.

  • Логическое 1 (true) указывает, что соответствующая точка запроса находится внутри полигональной области или на краю границы полигона.

  • Логическое 0 (false) указывает, что соответствующая точка запроса находится вне полигональной области.

Поэтому можно использовать in для индексации в xq и yq для определения интересующих точек запроса.

xq(in), yq(in)Запрос точек внутри или на краю полигональной области
xq(~in), yq(~in)Точки запроса за пределами полигональной области

Индикатор для точек на краю полигональной области, возвращаемый в виде логического массива. on имеет тот же размер, что и xq и yq.

  • Логическое 1 (true) указывает, что соответствующая точка запроса находится на границе полигона.

  • Логическое 0 (false) указывает, что соответствующая точка запроса находится внутри или вне границы полигона.

Поэтому можно использовать on и in для индексации в xq и yq определить интересующие точки запроса.

xq(on), yq(on)Запрос точек на границе полигона
xq(~on), yq(~on)Запрос точек внутри или вне границы полигона
xq(in&~on), yq(in&~on)Точки запроса строго внутри полигональной области

Расширенные возможности

.

См. также

Представлен до R2006a