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

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

Задайте квадратную область с квадратным отверстием. Задайте вершины внешнего контура в направлении против часовой стрелки и задайте вершины для внутреннего цикла в направлении по часовой стрелке. Используйте 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

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

Задайте координаты 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

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

Входные параметры

свернуть все

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 ложь) указывает, что соответствующая точка запроса находится вне многоугольной области.

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

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

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

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

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

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

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

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

Смотрите также

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