Точки, расположенные внутри или на краю полигональной области
Задайте пятиугольник и набор точек. Затем определите, какие точки лежат внутри (или на краю) пятиугольника.
Задайте координаты 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
Шесть точек находятся внутри многоугольника. Две точки лежат на краю многоугольника. Четыре точки находятся вне многоугольника.
xq
- x-координаты точек запросаx-координаты точек запроса, заданные как скаляр, вектор, матрица или многомерный массив.
Размер xq
должен совпадать с размером yq
.
Типы данных: double
| single
yq
- y-координаты точек запросаy-координаты точек запроса, заданные как скаляр, вектор, матрица или многомерный массив.
Размер yq
должен совпадать с размером xq
.
Типы данных: double
| single
xv
- x-координаты многоугольниковx-координаты многоугольников, заданные как вектор.
Размер xv
должен совпадать с размером yv
.
Чтобы задать вершины умноженных связанных или несвязных многоугольников, разделите координаты для различных циклов на NaN
. Кроме того, для умножения связанных многоугольников необходимо сориентировать вершины для внешних и внутренних циклов в противоположных направлениях.
Многоугольник не может быть самопересекающимся и умножаться связанным из-за неоднозначности, связанной с самопересечениями и ориентацией цикла.
Типы данных: double
| single
yv
- y-координаты многоугольниковy-координаты многоугольников, заданные как вектор.
Размер yv
должен совпадать с размером xv
.
Чтобы задать вершины умноженных связанных или несвязных многоугольников, разделите координаты для различных циклов на NaN
. Кроме того, для умножения связанных многоугольников необходимо сориентировать вершины для внешних и внутренних циклов в противоположных направлениях.
Многоугольник не может быть самопересекающимся и умножаться связанным из-за неоднозначности, связанной с самопересечениями и ориентацией цикла.
Типы данных: double
| single
in
- Индикатор для точек внутри или на краю многоугольникаИндикатор для точек внутри или на краю многоугольника, возвращенный как логический массив. in
- тот же размер, что и xq
и yq
.
Логический 1
(true
) указывает, что соответствующая точка запроса находится внутри полигональной области или на краю контура многоугольника.
Логический 0
(false
) указывает, что соответствующая точка запроса находится вне полигональной области.
Поэтому можно использовать in
для индекса в xq
и yq
для идентификации интересующих точек запроса.
xq(in) , yq(in) | Запросите точки внутри или на краю многоугольника |
xq(~in) , yq(~in) | Запросить точки за пределами полигональной области |
on
- Индикатор для точек на краю многоугольникаИндикатор для точек на краю многоугольника, возвращенный как логический массив. 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) | Точки запроса строго внутри полигональной области |
Указания и ограничения по применению:
Поддерживает входные входы с одинарной и двойной точностью, но использует арифметику с двойной точностью, даже если все входы имеют одинарную точность.
Эта функция полностью поддерживает массивы GPU. Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите Запуск функций MATLAB с распределенными массивами (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.