判断点是否包含在多边形中,是计算几何的基本问题,而且非常重要。MATLAB中用inpolygon函数可以测试点是否位于在多边形区域内部。该函数的调用语法为:
IN=inpolygon(X,Y,xv,yv) 返回与X和Y大小相同的矩阵IN。IN中的每个元素值根据点(X(p,q),Y(p,q))是否位于多边形区域内部取1或0。多边形区域的顶点用矢量xv和yv指定。如果(X(p,q),Y(p,q))位于多边形区域内部或位于多边形边界上,则IN(p,q)=1;如果(X(p,q),Y(p,q))位于多边形区域以外,则IN(p,q)=0。
[IN ON]=inpolygon(X,Y,xv,yv) 返回与X和Y大小相同的第2个矩阵ON。根据点(X(p,q),Y(p,q))是否位于多边形区域的边界上,ON每个元素的值可取1或0。当(X(p,q),Y(p,q))位于边界上时,IN(p,q)=1;当(X(p,q),Y(p,q))不在边界上时,IN(p,q)=0。
下面的代码首先生成250个随机点,定义一个5边形,然后将5边形内部的点用+表示,将5边形边界或以外的点用圆圈表示。
图1-1 判断点在多边形中的包含关系并绘图
code.matlab
>> L=linspace(0,2.*pi,6); xv=cos(L)';yv=sin(L)';
>> xv=[xv ; xv(1)]; yv=[yv ; yv(1)];
>> x=randn(250,1); y=randn(250,1);
>> in=inpolygon(x,y,xv,yv);
>> plot(xv,yv,x(in),y(in),'r+',x(~in),y(~in),'bo')
生成图1-1。