Точки, расположенные внутри или на краю полигональной области
Определите пятиугольник и набор точек. Затем определите, какие точки лежат внутри (или на краю) пятиугольника.
Определите координаты 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 на графическом процессоре (панель инструментов параллельных вычислений).
Эта функция полностью поддерживает распределенные массивы. Дополнительные сведения см. в разделе Запуск функций MATLAB с распределенными массивами (панель инструментов параллельных вычислений).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.