主要内容

subtract

两个 polyshape 对象的差集

说明

polyout = subtract(poly1,poly2) 返回一个 polyshape 对象,它的区域是两个 polyshape 对象的几何差集。输出 polyout 包含 poly1 的区域减去 poly2 中与 poly1 重叠的部分。输入参量 poly1poly2 必须具有兼容的数组大小。

示例

[polyout,shapeID,vertexID] = subtract(poly1,poly2) 还会返回从 polyout 中的顶点到 poly1poly2 中的顶点的顶点映射信息。仅当 poly1poly2 是标量 polyshape 对象时,subtract 函数才支持此语法。

shapeID 元素标识 polyout 中对应的顶点是源于 poly1poly2,还是因差集而产生的。vertexIDpolyout 的顶点映射到 poly1poly2 或差集的顶点。

示例

___ = subtract(___,Name=Value) 支持上述语法中的任何输入参量组合,且可使用一个或多个名称-值参量指定选项。您可以使用上述语法中的任何输出参量组合。例如,polyout = subtract(poly1,poly2,Simplify=false) 返回一个 polyshape 对象,该对象的顶点未经修改,不管是有交集还是有不正确的嵌套。

示例

全部折叠

创建并绘制部分重叠的两个多边形 poly1poly2

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 contains an axes object. The axes object contains 2 objects of type polygon.

figure

poly1 减去 poly2。得到的多边形是 poly1 减去 poly2 中与 poly1 重叠的部分。

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

      Vertices: [8×2 double]
    NumRegions: 1
      NumHoles: 0

plot(polyout1)

Figure contains an axes object. The axes object contains an object of type polygon.

现在将两个多边形反过来相减,即用 poly2 减去 poly1。得到的多边形是 poly2 减去 poly1 中与 poly2 重叠的部分。

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

      Vertices: [4×2 double]
    NumRegions: 1
      NumHoles: 0

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

Figure contains an axes object. The axes object contains an object of type polygon.

创建两个多边形,计算并绘制其差集。显示差集的顶点坐标和对应的顶点映射信息。

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

Figure contains an axes object. The axes object contains an object of type polygon.

[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 中的第四个顶点。差集的第二个和第四个顶点是因相减而产生的,因为 shapeIDvertexID 的对应值为 0。

输入参数

全部折叠

第一个输入 polyshape,指定为标量、向量、矩阵或多维数组。

第二个输入 polyshape,指定为标量、向量、矩阵或多维数组。

名称-值参数

全部折叠

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

示例: polyout = subtract(poly1,poly2,Simplify=false)

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: polyout = subtract(poly1,poly2,"Simplify",false)

将共线点保留为顶点,指定为以下数值或逻辑值之一:

  • 1 (true) - 保留所有共线点作为顶点。

  • 0 (false) - 删除共线点,使输出 polyshape 包含定义边界所需的最少顶点。

如果未指定 KeepCollinearPoints 名称-值参量,则该函数将根据在创建输入 polyshape 对象期间使用的值对其赋值。

  • 如果每个输入 polyshape 在创建期间将共线点保留为顶点,则该函数将 KeepCollinearPoints 设置为 true

  • 如果每个输入 polyshape 在创建期间删除了共线点,则该函数将 KeepCollinearPoints 设置为 false

  • 如果输入 polyshape 对象的共线点被区别对待,则该函数将 KeepCollinearPoints 设置为 false

修改要简化输出的多边形顶点,指定为以下数值或逻辑值之一:

  • 1 (true) - 当输出顶点产生交集或不正确嵌套时,修改多边形顶点以生成明确定义的多边形。

  • 0 (false) - 生成可能包含相交边、不正确嵌套、重复点或退化点的多边形。使用未明确定义的多边形进行计算可能会产生不准确或意想不到的结果。

输出参量

全部折叠

输出 polyshape,以标量、向量、矩阵或多维数组形式返回。

两个输入 polyshape 参量必须具有兼容的大小。例如,如果两个输入 polyshape 向量具有不同的长度 MN,则它们必须有不同的方向(一个必须是行向量,一个必须是列向量)。polyout 则是 M×NN×M,具体取决于每个输入向量的方向。有关兼容的数组大小的详细信息,请参阅基本运算的兼容数组大小

形状 ID,以列向量形式返回,其各个元素表示差集中顶点的来源。如果输出 polyshape 的顶点是因相减而产生的,则 shapeID 中的对应元素的值为 0。当顶点源于 poly1 时,对应元素为 1,当顶点源于 poly2 时,对应元素为 2。

shapeID 的长度等于输出 polyshapeVertices 属性中的行数。仅当输入 polyshape 对象是标量时,xor 函数才支持此输出参量。

数据类型: double

顶点 ID,以列向量形式返回,其元素将输出 polyshape 中的顶点映射到来源的 polyshape 中的顶点。vertexID 的元素包含输入 polyshapeVertices 属性中对应顶点的行号。如果输出 polyshape 的顶点是因差集而产生的,则对应元素为 0。

vertexID 的长度等于输出 polyshapeVertices 属性中的行数。仅当输入 polyshape 对象是标量时,subtract 函数才支持此输出参量。

数据类型: double

扩展功能

全部展开

版本历史记录

在 R2017b 中推出

全部展开

另请参阅

| | |