пересечение

Пересечение объектов 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

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

Типы данных: удвойтесь | единственный | 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 на 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

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

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

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

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

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

|

Введенный в R2017b

Была ли эта тема полезной?