Точки расположены внутри или в напряжении из многоугольной области
in = inpolygon(xq,yq,xv,yv)
[in,on]
= inpolygon(xq,yq,xv,yv)
Задайте пятиугольник и набор точек. Затем определите, какие точки лежат внутри (или на ребре) пятиугольника.
Задайте координаты 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) | Точки запроса строго в многоугольной области |
Указания и ограничения по применению:
Поддерживает входные параметры с двойной точностью и с одинарной точностью, но использует арифметику с двойной точностью, даже если все входные параметры с одинарной точностью.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Выполнения на графическом процессоре (Parallel Computing Toolbox).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.