inpolygon
位于多边形区域边缘内部或边缘上的点
说明
示例
凸多边形内的点
定义一个五边形和一个点集。然后,确定哪些点位于五边形的内部(或边缘上)。
定义多边形顶点的 x 和 y 坐标以创建五角形。
L = linspace(0,2*pi,6); xv = cos(L)'; yv = sin(L)';
定义 250 个随机查询点的 x 和 y 坐标。初始化随机数生成器以使 randn
的输出可重复。
rng default
xq = randn(250,1);
yq = randn(250,1);
确定每个点是位于多边形区域边缘内部还是边缘上。还确定任何点是否位于多边形区域的边缘。
[in,on] = inpolygon(xq,yq,xv,yv);
确定位于多边形区域边缘内部或边缘上的点数。
numel(xq(in))
ans = 80
确定位于多边形区域边缘上的点数。
numel(xq(on))
ans = 0
由于多边形区域边缘上没有点,因此用 xq(in)
, yq(in)
标识的所有 80 个点完全位于多边形区域内部。
确定位于多边形区域外部的点数(不在边缘内部或边缘上)。
numel(xq(~in))
ans = 170
绘制多边形和查询点。显示多边形内部的点时带有一个红色加号。显示多边形外部的点时带有一个蓝色圆形。
figure plot(xv,yv) % polygon axis equal hold on plot(xq(in),yq(in),'r+') % points inside plot(xq(~in),yq(~in),'bo') % points outside hold off
多连通多边形内的点
查找带有方孔的方形内的点。
定义一个带有方孔的方形区域。按逆时针方向指定外循环的顶点,并按顺时针方向指定内循环的顶点。使用 NaN
隔开外循环和内循环的坐标。
xv = [1 4 4 1 1 NaN 2 2 3 3 2]; yv = [1 1 4 4 1 NaN 2 3 3 2 2];
定义 500 个随机点的 x 和 y 坐标。初始化随机数生成器以使 randn
的输出可重复。
rng default
xq = rand(500,1)*5;
yq = rand(500,1)*5;
确定每个点是位于多边形区域边缘内部还是边缘上。
in = inpolygon(xq,yq,xv,yv);
绘制多边形和查询点。显示多边形内部的点时带有一个红色加号。显示多边形外部的点时带有一个蓝色圆形。
figure plot(xv,yv,'LineWidth',2) % polygon axis equal hold on plot(xq(in),yq(in),'r+') % points inside plot(xq(~in),yq(~in),'bo') % points outside hold off
方孔内的查询点在多边形外部。
自交多边形内的点
定义五角形的 x 和 y 坐标。
xv = [0.5;0.2;1.0;0;0.8;0.5]; yv = [1.0;0.1;0.7;0.7;0.1;1];
定义 12 个查询点的 x 和 y 坐标。
xq = [0.1;0.5;0.9;0.2;0.4;0.5;0.5;0.9;0.6;0.8;0.7;0.2]; yq = [0.4;0.6;0.9;0.7;0.3;0.8;0.2;0.4;0.4;0.6;0.2;0.6];
确定每个点是位于多边形区域边缘内部还是边缘上。还确定任何点是否位于多边形区域的边缘。
[in,on] = inpolygon(xq,yq,xv,yv);
确定位于多边形区域边缘内部或边缘上的点数。
numel(xq(in))
ans = 8
确定位于多边形区域边缘上的点数。
numel(xq(on))
ans = 2
确定位于多边形区域外部的点数(不在边缘内部或边缘上)。
numel(xq(~in))
ans = 4
绘制多边形和点。显示完全在多边形内部的点时带有一个红色加号。显示边缘上的点时带有一个黑色星号。显示多边形外部的点时带有一个蓝色圆形。
figure plot(xv,yv) % polygon hold on plot(xq(in&~on),yq(in&~on),'r+') % points strictly inside plot(xq(on),yq(on),'k*') % points on edge plot(xq(~in),yq(~in),'bo') % points outside hold off
6 个点位于多边形内部。两个点位于多边形的边缘上。四个点位于多边形外部。
输入参数
xq
— 查询点的 x 坐标
标量 | 向量 | 矩阵 | 多维数组
查询点的 x 坐标,指定为标量、向量、矩阵或多维数组。
xq
的大小必须与 yq
的大小匹配。
数据类型: double
| single
yq
— 查询点的 y 坐标
标量 | 向量 | 矩阵 | 多维数组
查询点的 y 坐标,指定为标量、向量、矩阵或多维数组。
yq
的大小必须与 xq
的大小匹配。
数据类型: double
| single
xv
— 多边形顶点的 x 坐标
向量
多边形顶点的 x 坐标,指定为向量。
xv
的大小必须与 yv
的大小匹配。
要指定多连通或不相交的多边形的顶点,请通过 NaN
隔开不同循环的坐标。另外,对于多连通多边形,必须使外部和内部循环的顶点朝着相反的方向。
由于与自相交和循环方向相关的多义性,多边形不能自相交和多连通。
数据类型: double
| single
yv
— 多边形顶点的 y 坐标
向量
多边形顶点的 y 坐标,指定为向量。
yv
的大小必须与 xv
的大小匹配。
要指定多连通或不相交的多边形的顶点,请通过 NaN
隔开不同循环的坐标。另外,对于多连通多边形,必须使外部和内部循环的顶点朝着相反的方向。
由于与自相交和循环方向相关的多义性,多边形不能自相交和多连通。
数据类型: double
| single
输出参数
in
— 在多边形区域边缘内部或边缘上的点的指示符
逻辑数组
在多边形区域边缘内部或边缘上的点的指示符,以逻辑数组的形式返回。in
的大小与 xq
和 yq
相同。
逻辑值
1
(true
) 用于指明相应的查询点是在多边形区域内部还是在多边形边界的边缘。逻辑值
0
(false
) 用于指明相应的查询点是在多边形区域的外部。
因此,可以使用 in
创建指向 xq
和 yq
的索引,以标识相关的查询点。
xq(in) , yq(in) | 在多边形区域边缘内部或边缘上的查询点 |
xq(~in) , yq(~in) | 在多边形区域外部的查询点 |
on
— 多边形区域边缘上的点的指示符
逻辑数组
多边形区域边缘上的点的指示符,以逻辑数组的形式返回。on
的大小与 xq
和 yq
相同。
逻辑值
1
(true
) 用于指明相应的查询点是在多边形边界上。逻辑值
0
(false
) 用于指明相应的查询点是在多边形边界的内部还是外部。
因此,可以使用 on
和 in
创建指向 xq
和 yq
的索引,以标识相关的查询点。
xq(on) , yq(on) | 在多边形边界上的查询点 |
xq(~on) , yq(~on) | 位于多边形边界内部或外部的查询点 |
xq(in&~on) , yq(in&~on) | 完全在多边形区域内部的查询点 |
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
支持单精度和双精度输入,但即使所有输入都是单精度,也使用双精度算术运算。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
另请参阅
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)