inpolygon

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

Описание

пример

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