вычитание

Различие двух объектов polyshape

Синтаксис

polyout = subtract(poly1,poly2)
[polyout,shapeID,vertexID] = subtract(poly1,poly2)
___ = subtract(poly1,poly2,'KeepCollinearPoints',TF)

Описание

пример

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

пример

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

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

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

Примеры

свернуть все

Создайте и постройте два полигона poly1 и poly2, который это частично перекрывает.

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

Вычтите poly2 из poly1. Получившимся полигоном является poly1 минус любая часть poly2, который накладывается с poly1.

polyout1 = subtract(poly1,poly2)
polyout1 = 
  polyshape with properties:

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

plot(polyout1)

Теперь вычтите эти два полигона в противоположном порядке, то есть, вычтите poly1 из poly2. Получившимся полигоном является poly2 минус любая часть poly1, который перекрывает poly2.

polyout2 = subtract(poly2,poly1)
polyout2 = 
  polyshape with properties:

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

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

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

poly1 = polyshape([0 0 1 1],[1 0 0 1]);
poly2 = translate(poly1,[0.5 0.5]);
[polyout,shapeID,vertexID] = subtract(poly1,poly2);
plot(polyout)
axis equal

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

         0    1.0000    1.0000    1.0000
    0.5000    1.0000         0         0
    0.5000    0.5000    2.0000    4.0000
    1.0000    0.5000         0         0
    1.0000         0    1.0000    3.0000
         0         0    1.0000    4.0000

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

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

свернуть все

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

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

Коллинеарный индикатор вершин, заданный как 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 в зависимости от ориентации каждого входного вектора. Для получения дополнительной информации о совместимых размерах массивов смотрите Совместимые Размеры Массивов для Основных Операций.

Сформируйте ID, возвращенный как вектор-столбец, элементы которого каждый представляет источник вершины в различии. Значение элемента в shapeID 0, когда соответствующая вершина вывода polyshape была создана вычитанием. Элемент равняется 1, когда соответствующая вершина произошла из poly1, и 2, когда это произошло из poly2.

Длина shapeID равна количеству строк в свойстве Vertices вывода polyshape. Функция xor только поддерживает этот выходной аргумент, если объекты входа polyshape являются скаляром.

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

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

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

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

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

| | |

Введенный в R2017b