Main Content

polyshape

二维多边形

说明

polyshape 函数可创建由二维顶点定义的多边形,并返回具有描述其顶点、实心区域和孔的各种属性的 polyshape 对象。例如,pgon = polyshape([0 0 1 1],[1 0 0 1]) 将创建由四个点 (0,1)、(0,0)、(1,0) 和 (1,1) 定义的实心正方形。

>> pgon = polyshape([0 0 1 1],[1 0 0 1])
pgon = 

  polyshape with properties:

      Vertices: [4×2 double]
    NumRegions: 1
      NumHoles: 0
>> plot(pgon)

Plot of a square polyshape

创建对象

创建 polyshape 对象时,输入顶点应定义多边形的一个或多个边界,这些边界没有交集并且嵌套正确。否则,polyshape 函数将根据需要自动更改输入顶点,以创建明确定义的多边形。

如果要创建正多边形,还可以使用 nsidedpoly 函数。nsidedpoly 使您能够选择指定多边形的中心点和边长等参数。

描述

pgon = polyshape() 创建一个空 polyshape 对象。

示例

pgon = polyshape(x,y) 从由 x 坐标向量和对应的 y 坐标向量定义的二维顶点创建 polyshapexy 的长度必须相同,且至少要有三个元素。

示例

pgon = polyshape(P) 从 N×2 矩阵 P 中定义的二维顶点创建 polyshape,其中 N 是顶点数。P 的第一列定义 x 坐标,第二列定义 y 坐标。

示例

pgon = polyshape(X,Y) 中,XY 分别是 x 和 y 坐标的 1×M 向量元胞数组,该语法创建具有 M 个边界的多边形。X 中的每个向量必须与 Y 中的对应向量具有相同的长度,但各个边界的顶点数可以互不相同。

示例

pgon = polyshape(___,Name,Value) 为上述任意语法指定创建 polyshape 对象的其他参数。

输入参数

全部展开

多边形顶点的 x 坐标,指定为向量。您可以通过在每个边界之间放置 NaN 来一次表示多个边界的坐标。例如,pgon = polyshape([0 0 1 NaN 1 5 5],[1 0 0 NaN 5 5 1]) 创建由两个实心三角形构成的 polyshape

double 类型的数值输入坐标将自动转换为 double 类型。

数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

多边形顶点的 y 坐标,指定为向量。您可以通过在每个边界之间放置 NaN 来一次表示多个边界的坐标。例如,pgon = polyshape([0 0 1 NaN 1 5 5],[1 0 0 NaN 5 5 1]) 创建由两个实心三角形构成的 polyshape

double 类型的数值输入坐标将自动转换为 double 类型。

数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

多边形的二维顶点,指定为两列矩阵。P 的第一列包含顶点的 x 坐标,第二列包含顶点的 y 坐标。P 必须至少有 3 行。

您可以通过在每个边界之间放置 NaN 来一次表示多个边界的坐标。例如,pgon = polyshape([1 0; 0 0; 0 1; NaN NaN; 1 5; 5 5; 5 1]) 创建由两个实心三角形构成的 polyshape

double 类型的数值输入坐标将自动转换为 double 类型。

数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

M 个边界的 x 坐标,指定为向量元胞数组。每个向量的长度可以不同,但必须与对应的 y 向量的长度匹配。

double 类型的数值输入坐标将自动转换为 double 类型。

数据类型: cell

M 个边界的 y 坐标,指定为向量元胞数组。每个向量的长度可以不同,但必须与对应的 y 向量的长度匹配。

double 类型的数值输入坐标将自动转换为 double 类型。

数据类型: cell

名称-值参数

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

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

示例: pgon = polyshape(P,'SolidBoundaryOrientation','ccw')

边界的方向,指定为以逗号分隔的对组,该对组由 'SolidBoundaryOrientation' 和下列值之一组成:

  • 'auto' - 根据边界嵌套自动确定边界类型。

  • 'cw' - 将顺时针顶点方向视为实心边界。

  • 'ccw' - 将逆时针顶点方向视为实心边界。

如果多边形数据是由其他软件按照某种特殊约定生成的,则通常会指定此参数以实现一致性目的。

顶点更改,指定为以逗号分隔的对组,该对组由 'Simplify' 和下列值之一组成:

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

  • false - 即使有交集或不正确嵌套,也不更改输入顶点。使用未明确定义的多边形进行计算可能会产生不准确或意想不到的结果。

数据类型: logical

共线顶点,指定为以逗号分隔的对组,该对组由 'KeepCollinearPoints' 和下列值之一组成:

  • false - 删除在创建 polyshape 时的共线点,使其中包含定义边界所需的最少顶点。

  • true - 保留在创建 polyshape 时的所有共线点作为顶点。

在创建 polyshape 后,当您使用 addboundarysimplify 对象函数时,'KeepCollinearPoints' 的值将自动传入。

数据类型: logical

属性

全部展开

多边形的二维顶点,指定为两列矩阵。顶点矩阵包含多边形每个边界的顶点。NaN 值用于分隔每个边界的一组顶点。

数据类型: double

此属性为只读

构成多边形的区域数,指定为整数标量。区域是由外边界界定的面积,其中可能包含完全位于外边界内的孔边界。

数据类型: double

此属性为只读

多边形中的孔数,指定为整数标量。

数据类型: double

对象函数

全部展开

addboundary添加 polyshape 边界
polybuffer围绕点、线或 polyshape 对象创建缓冲区
rmboundary删除 polyshape 边界
rmholes删除 polyshape 中的孔
rmslivers删除 polyshape 边界离群值
rotate旋转 polyshape
scale缩放 polyshape
simplify简化 polyshape 边界
sortboundariespolyshape 边界进行排序
sortregionspolyshape 区域进行排序
translate平移 polyshape
boundarypolyshape 边界的顶点坐标
holespolyshape 孔边界转换为 polyshape 对象数组
ishole确定 polyshape 边界是否为孔
isinteriorpolyshape 内的查询点
issimplified确定 polyshape 是否明确定义
nearestvertex查询最近的 polyshape 顶点
numboundariespolyshape 的边界数
numsidespolyshape 的边数
overlaps确定 polyshape 对象是否重叠
plot绘制 polyshape
regions访问 polyshape 区域
areapolyshape 的面积
boundingboxpolyshape 的边界框
centroidpolyshape 的矩心
convhullpolyshape 的凸包
perimeterpolyshape 的周长
triangulation三角剖分 polyshape
turningdist计算 polyshape 对象之间的形变量
intersectpolyshape 对象的交集
subtract两个 polyshape 对象的差集
unionpolyshape 对象的并集
xor两个 polyshape 对象的异或

示例

全部折叠

创建并绘制由四个点形成的多边形,并计算其面积、周长和矩心坐标。

pgon = polyshape([0 0 1 3], [0 3 3 0]);
plot(pgon)

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

A = area(pgon)
A = 6
P = perimeter(pgon)
P = 10.6056
[Cx Cy] = centroid(pgon)
Cx = 1.0833
Cy = 1.2500

分析具有相交边界的多边形。

创建包含自相交边界的多边形。默认情况下,polyshape 函数将边界分成两段不同的边界,以创建明确定义的多边形。

P = [0 0; 1 1; 1 0; 0 1; 0 0];
pgon = polyshape(P)
Warning: Polyshape has duplicate vertices, intersections, or other inconsistencies that may produce inaccurate or unexpected results. Input data has been modified to create a well-defined polyshape.
pgon = 
  polyshape with properties:

      Vertices: [7x2 double]
    NumRegions: 2
      NumHoles: 0

绘制多边形并计算面积。

plot(pgon)

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

A = area(pgon)
A = 0.5000

如果不简化原始输入顶点,则构成多边形的两个三角形区域的面积相互抵消。

pgon2 = polyshape(P,'Simplify',false)
pgon2 = 
  polyshape with properties:

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

A2 = area(pgon2)
A2 = 0

分析具有嵌套边界的多边形。

创建一个多边形,里面包含两条正确嵌套的边界。polyshape 将最外侧边界定义为实心区域的外边界。从外往内,下一个边界定义孔的开始。

t = 0.05:0.5:2*pi;
x1 = cos(t);
y1 = sin(t);
x2 = 0.5*cos(t);
y2 = 0.5*sin(t);
pgon = polyshape({x1,x2},{y1,y2})
pgon = 
  polyshape with properties:

      Vertices: [27x2 double]
    NumRegions: 1
      NumHoles: 1

plot(pgon)

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

使用 addboundary 函数再创建一个多边形,为 pgon 添加第三条外边界。

x3 = 2*cos(t);
y3 = 2*sin(t);
pgon2 = addboundary(pgon,x3,y3)
pgon2 = 
  polyshape with properties:

      Vertices: [41x2 double]
    NumRegions: 2
      NumHoles: 1

plot(pgon2)

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

添加第三条外边界后,polyshape 需要根据新的嵌套模式重新组织实心区域的边界和孔的边界。polyshape 仍然从最外侧边界(指示实心区域的开始)向内进行,里面的每一条嵌套边界交替作为孔的边界和实心区域的边界。新的多边形现在有两个实心区域和一个孔。

版本历史记录

在 R2017b 中推出

另请参阅

|