пересечение

Пересечение объектов polyshape

Синтаксис

polyout = intersect(poly1,poly2)
polyout = intersect(polyvec)
[polyout,shapeID,vertexID] = intersect(poly1,poly2)
[polyout,shapeID,vertexID] = intersect(polyvec)
___ = intersect(___,'KeepCollinearPoints',TF)
[in,out] = intersect(poly1,lineseg)

Описание

пример

polyout = intersect(poly1,poly2) возвращает объект polyshape, области которого являются геометрическим пересечением двух объектов polyshape. Пересечение содержит области poly1 и poly2 то перекрытие. poly1 и poly2 должны иметь совместимые размеры массивов.

пример

polyout = intersect(polyvec) возвращает объект polyshape, области которого являются пересечением всех объектов polyshape в векторном polyvec. Пересечение содержит области, где весь polyshape возражает в перекрытии polyvec.

пример

[polyout,shapeID,vertexID] = intersect(poly1,poly2) также возвращает информацию об отображении вершины в вершины в polyout к вершинам в poly1 и poly2. Функция intersect только поддерживает этот синтаксис, когда poly1 и poly2 являются скалярными объектами polyshape.

Элементы shapeID идентифицируют, была ли соответствующая вершина в polyout, порожденном в poly1, poly2, или, создана из пересечения. vertexID сопоставляет вершины polyout к вершинам poly1, poly2 или пересечения.

[polyout,shapeID,vertexID] = intersect(polyvec) возвращается информация об отображении вершины от polyout до каждого элемента вектора polyshape возражает polyvec.

___ = intersect(___,'KeepCollinearPoints',TF) задает, сохранить ли или удалить коллинеарные точки в polyout для какого-либо из предыдущих синтаксисов.

пример

[in,out] = intersect(poly1,lineseg) возвращает линейные сегменты lineseg, которые являются внутри и снаружи poly1. Матричный lineseg имеет два столбца. Первый столбец задает x - координаты линейных сегментов и второго столбца задают соответствующий y - координаты.

intersect поддерживает этот синтаксис только, когда poly1 является скалярный polyshape, и lineseg не содержит самопересечений.

Примеры

свернуть все

Создайте и постройте два полигона.

poly1 = polyshape([0 0 1 1],[1 0 0 1]);
poly2 = polyshape([0.75 1.25 1.25 0.75],[0.25 0.25 0.75 0.75]);
plot(poly1)
hold on
plot(poly2)

figure

Вычислите и постройте пересечение poly1 и poly2.

polyout = intersect(poly1,poly2)
polyout = 
  polyshape with properties:

      Vertices: [4x2 double]
    NumRegions: 1
      NumHoles: 0

plot(polyout)
xlim([-0.2 1.4]);
ylim([-0.2 1.2]);

Создайте вектор, содержащий два полигона.

polyarray1 = polyshape([0 0 1 1],[1 0 0 1]);
polyarray2 = polyshape([0.75 1.25 1.25 0.75],[0.25 0.25 0.75 0.75]);
poly1 = [polyarray1 polyarray2]
poly1 = 
  1x2 polyshape array with properties:

    Vertices
    NumRegions
    NumHoles

plot(poly1(1))
hold on
plot(poly1(2))

figure

Вычислите пересечение элементов poly1.

polyout = intersect(poly1)
polyout = 
  polyshape with properties:

      Vertices: [4x2 double]
    NumRegions: 1
      NumHoles: 0

plot(polyout)
xlim([-0.2 1.4]);
ylim([-0.2 1.2]);

Создайте два полигона и вычислите их пересечение. Отобразите координаты вершины пересечения и соответствующей информации об отображении вершины.

poly1 = polyshape([0 0 1 1],[1 0 0 1]);
poly2 = polyshape([0.75 1.25 1.25 0.75],[0.25 0.25 0.75 0.75]);
[polyout,shapeID,vertexID] = intersect(poly1,poly2);

[polyout.Vertices shapeID vertexID]
ans = 4×4

    0.7500    0.2500    2.0000    1.0000
    0.7500    0.7500    2.0000    2.0000
    1.0000    0.7500         0         0
    1.0000    0.2500         0         0

Первые две вершины пересечения, порожденного в poly2, начиная с соответствующих значений в shapeID, равняются 2. Эти вершины являются первыми и вторыми вершинами в свойстве poly2.Vertices, соответственно, поскольку их соответствующие значения в vertexID равняются 1 и 2. Последние две вершины polyout были созданы из пересечения, потому что соответствующие значения в shapeID и vertexID 0.

Создайте прямоугольный полигон и линейный сегмент.

poly1 = polyshape([0 0 1 1],[1 0 0 1]);
lineseg = [0.5 0.5; 1.5 1.5];

Вычислите пересечение полигона с линейным сегментом и определите, который разделы линейного сегмента внутри или снаружи полигона.

[in,out] = intersect(poly1,lineseg);
plot(poly1)
hold on
plot(in(:,1),in(:,2),'b',out(:,1),out(:,2),'r')
legend('Polygon','Inside','Outside','Location','NorthWest')

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

свернуть все

Первый вход polyshape, заданный как скаляр, вектор, матрица или многомерный массив.

Типы данных: polyshape

Второй вход polyshape, заданный как скаляр, вектор, матрица или многомерный массив.

Типы данных: polyshape

Вектор polyshape.

Типы данных: polyshape

Координаты линейного сегмента, заданные как матрица 2D столбца. Первый столбец задает x - координаты линейных сегментов и второго столбца задают y - координаты. lineseg должен иметь по крайней мере две строки и не содержать самопересечения.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Коллинеарный индикатор вершин, заданный как false или true:

  • ложь Удалите коллинеарные точки так, чтобы вывод polyshape содержал наименьшее количество вершин, необходимых, чтобы задать контуры.

  • tRUE Сохраните все коллинеарные точки как вершины.

Когда параметр 'KeepCollinearPoints' не задан, его значение присвоено согласно значениям, используемым при создании объектов входа polyshape:

  • Если значением был true для каждого входа polyshape, когда они были созданы, то значение для вывода polyshape установлено к true.

  • Если значением был false для каждого входа polyshape, когда они были созданы, то значение для вывода polyshape установлено к false.

  • Если значения для объектов входа polyshape не соответствуют, то значение для вывода polyshape установлено к false.

Типы данных: логический

Выходные аргументы

свернуть все

Выведите polyshape, возвращенный как скаляр, вектор, матрица или многомерный массив.

  • Если вы вводите два аргумента polyshape, то у них должны быть совместимые размеры. Например, если два вектора входа polyshape имеют различные длины M и N, то у них должны быть различные ориентации (нужно быть вектором - строкой, и нужно быть вектор-столбцом). polyout является затем M-by-N или N-by-M в зависимости от ориентации каждого входного вектора. Для получения дополнительной информации о совместимых размерах массивов смотрите Совместимые Размеры Массивов для Основных Операций.

  • Если вы предоставляете одному входному параметру polyvec, то polyout является скалярным объектом polyshape.

Сформируйте ID, возвращенный как вектор-столбец, элементы которого каждый представляет источник вершины в пересечении.

  • Длина shapeID равна количеству строк в свойстве Vertices вывода polyshape.

  • Элементы shapeID зависят от количества входных параметров:

    • Если вы предоставляете двум входным параметрам poly1 и poly2, то они должны быть скалярными объектами polyshape. Значение элемента в shapeID 0, когда соответствующая вершина вывода polyshape была создана пересечением. Элемент равняется 1, когда соответствующая вершина произошла из poly1, и 2, когда это произошло из poly2.

    • Если вы предоставляете одному входному параметру polyvec, который является вектором объектов polyshape, то shapeID содержит индекс элемента polyvec от который соответствующая выходная порожденная вершина. Значение элемента 0, когда соответствующая вершина была создана пересечением.

Типы данных: double

ID вершины, возвращенный как вектор-столбец, элементы которого сопоставляют вершины в выводе polyshape к вершинам в polyshape источника. Элементы vertexID содержат номера строк соответствующих вершин в свойстве Vertices входа polyshape. Элемент 0, когда соответствующая вершина вывода polyshape была создана пересечением.

Длина vertexID равна количеству строк в свойстве Vertices вывода polyshape. Если вы обеспечиваете два объекта входа polyshape, то intersect только поддерживает этот выходной аргумент, если они - скаляр.

Типы данных: double

В координатах линейного сегмента, возвращенных как матрица 2D столбца. Первый столбец in содержит x - координаты линейных сегментов во входе polyshape, и второй столбец содержит соответствующий y - координаты.

Типы данных: double

Вне координат линейного сегмента, возвращенных как матрица 2D столбца. Первый столбец out содержит x - координаты линейных сегментов за пределами входа polyshape, и второй столбец содержит соответствующий y - координаты.

Типы данных: double

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

|

Введенный в R2017b