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);
绘制多边形和查询点。显示多边形内部的点时带有一个红色加号。显示多边形外部的点时带有一个蓝色圆形。
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
绘制多边形和点。显示完全在多边形内部的点时带有一个红色加号。显示边缘上的点时带有一个黑色星号。显示多边形外部的点时带有一个蓝色圆形。
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 个点位于多边形内部。两个点位于多边形的边缘上。四个点位于多边形外部。
输入参数
查询点的 x 坐标,指定为标量、向量、矩阵或多维数组。
xq 的大小必须与 yq 的大小匹配。
数据类型: double | single
查询点的 y 坐标,指定为标量、向量、矩阵或多维数组。
yq 的大小必须与 xq 的大小匹配。
数据类型: double | single
多边形顶点的 x 坐标,指定为向量。
xv 的大小必须与 yv 的大小匹配。
要指定多连通或不相交的多边形的顶点,请通过 NaN 隔开不同循环的坐标。另外,对于多连通多边形,必须使外部和内部循环的顶点朝着相反的方向。
由于与自相交和循环方向相关的多义性,多边形不能自相交和多连通。
数据类型: double | single
多边形顶点的 y 坐标,指定为向量。
yv 的大小必须与 xv 的大小匹配。
要指定多连通或不相交的多边形的顶点,请通过 NaN 隔开不同循环的坐标。另外,对于多连通多边形,必须使外部和内部循环的顶点朝着相反的方向。
由于与自相交和循环方向相关的多义性,多边形不能自相交和多连通。
数据类型: double | single
输出参量
在多边形区域边缘内部或边缘上的点的指示符,以逻辑数组的形式返回。in 的大小与 xq 和 yq 相同。
逻辑值
1(true) 用于指明相应的查询点是在多边形区域内部还是在多边形边界的边缘。逻辑值
0(false) 用于指明相应的查询点是在多边形区域的外部。
因此,可以使用 in 创建指向 xq 和 yq 的索引,以标识相关的查询点。
xq(in), yq(in) | 在多边形区域边缘内部或边缘上的查询点 |
xq(~in), yq(~in) | 在多边形区域外部的查询点 |
多边形区域边缘上的点的指示符,以逻辑数组的形式返回。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++ 代码生成”部分中的用法说明和限制。同样的用法说明和限制也适用于 GPU 代码生成。
inpolygon 函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
inpolygon 函数完全支持 GPU 数组。要在 GPU 上运行该函数,请将输入数据指定为 gpuArray (Parallel Computing Toolbox)。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
inpolygon 函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
另请参阅
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)