polyshape
二维多边形形状
说明
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)
创建对象
创建 polyshape
对象时,输入顶点应定义多边形的一个或多个边界,这些边界没有交集并且嵌套正确。否则,polyshape
函数将根据需要自动更改输入顶点,以创建明确定义的多边形。
如果要创建正多边形,还可以使用 nsidedpoly
函数。nsidedpoly
使您能够选择指定多边形的中心点和边长等参数。
语法
描述
pgon = polyshape()
创建一个空 polyshape
对象。
pgon = polyshape(___,
为上述任意语法指定创建 Name,Value
)polyshape
对象的其他参数。
输入参量
x
— x 坐标
向量
多边形顶点的 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
— y 坐标
向量
多边形顶点的 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
— 二维顶点
两列矩阵
多边形的二维顶点,指定为两列矩阵。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
X
— x 坐标
向量元胞数组
M 个边界的 x 坐标,指定为向量元胞数组。每个向量的长度可以不同,但必须与对应的 y 向量的长度匹配。
非 double
类型的数值输入坐标将自动转换为 double
类型。
数据类型: cell
Y
— y 坐标
向量元胞数组
M 个边界的 y 坐标,指定为向量元胞数组。每个向量的长度可以不同,但必须与对应的 y 向量的长度匹配。
非 double
类型的数值输入坐标将自动转换为 double
类型。
数据类型: cell
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: pgon = polyshape(P,'SolidBoundaryOrientation','ccw')
SolidBoundaryOrientation
— 边界的方向
'auto'
(默认) | 'cw'
| 'ccw'
边界的方向,指定为以逗号分隔的对组,该对组由 'SolidBoundaryOrientation'
和下列值之一组成:
'auto'
- 根据边界嵌套自动确定边界类型。'cw'
- 将顺时针顶点方向视为实心边界。'ccw'
- 将逆时针顶点方向视为实心边界。
如果多边形数据是由其他软件按照某种特殊约定生成的,则通常会指定此参数以实现一致性目的。
Simplify
— 顶点更改
true
(默认) | false
顶点更改,指定为以逗号分隔的对组,该对组由 'Simplify'
和下列值之一组成:
true
- 当输入顶点产生交集或不正确嵌套时,更改多边形顶点以生成明确定义的多边形。false
- 即使有交集或不正确嵌套,也不更改输入顶点。使用未明确定义的多边形进行计算可能会产生不准确或意想不到的结果。
数据类型: logical
KeepCollinearPoints
— 共线顶点
false
(默认) | true
共线顶点,指定为以逗号分隔的对组,该对组由 'KeepCollinearPoints'
和下列值之一组成:
false
- 删除在创建polyshape
时的共线点,使其中包含定义边界所需的最少顶点。true
- 保留在创建polyshape
时的所有共线点作为顶点。
在创建 polyshape
后,当您使用 addboundary
或 simplify
对象函数时,'KeepCollinearPoints'
的值将自动传入。
数据类型: logical
属性
Vertices
— 二维顶点
两列矩阵
多边形的二维顶点,指定为两列矩阵。顶点矩阵包含多边形每个边界的顶点。NaN
值用于分隔每个边界的一组顶点。
数据类型: double
NumRegions
— 区域数
整数标量
此 属性 为只读。
构成多边形的区域数,指定为整数标量。区域是由外边界界定的面积,其中可能包含完全位于外边界内的孔边界。
数据类型: double
NumHoles
— 孔数
整数标量
此 属性 为只读。
多边形中的孔数,指定为整数标量。
数据类型: double
对象函数
修改多边形
addboundary | 添加 polyshape 边界 |
polybuffer | 围绕点、线或 polyshape 对象创建缓冲区 |
rmboundary | 删除 polyshape 边界 |
rmholes | 删除 polyshape 中的孔 |
rmslivers | 删除 polyshape 边界离群值 |
rotate | 旋转 polyshape |
scale | 缩放 polyshape |
simplify | 简化 polyshape 边界 |
sortboundaries | 对 polyshape 边界进行排序 |
sortregions | 对 polyshape 区域进行排序 |
translate | 平移 polyshape |
查询和可视化
boundary | polyshape 边界的顶点坐标 |
holes | 将 polyshape 孔边界转换为 polyshape 对象数组 |
ishole | 确定 polyshape 边界是否为孔 |
isinterior | polyshape 内的查询点 |
issimplified | 确定 polyshape 是否明确定义 |
nearestvertex | 查询最近的 polyshape 顶点 |
numboundaries | polyshape 的边界数 |
numsides | polyshape 的边数 |
overlaps | 确定 polyshape 对象是否重叠 |
plot | 绘制 polyshape |
regions | 访问 polyshape 区域 |
几何量
area | polyshape 的面积 |
boundingbox | polyshape 的边界框 |
centroid | polyshape 的矩心 |
convhull | polyshape 的凸包 |
perimeter | polyshape 的周长 |
triangulation | 三角剖分 polyshape |
turningdist | 计算 polyshape 对象之间的形变量 |
示例
简单四边形
创建并绘制由四个点形成的多边形,并计算其面积、周长和矩心坐标。
pgon = polyshape([0 0 1 3], [0 3 3 0]); plot(pgon)
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)
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)
使用 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)
添加第三条外边界后,polyshape
需要根据新的嵌套模式重新组织实心区域的边界和孔的边界。polyshape
仍然从最外侧边界(指示实心区域的开始)向内进行,里面的每一条嵌套边界交替作为孔的边界和实心区域的边界。新的多边形现在有两个实心区域和一个孔。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
必须启用动态内存分配才能进行代码生成。
polyshape
对象不能作为入口函数的输入或输出。循环外的
polyshape
对象无法引用在循环内分配的polyshape
对象。有关详细信息,请参阅Handle Object Limitations for Code Generation (Fixed-Point Designer)。名称-值对组必须为编译时常量。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
版本历史记录
在 R2017b 中推出
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)