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

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

Синтаксис

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

Описание

пример

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 (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