1
嗨我碰到这个算法从Mathhelpforum它确定一个点是否在一个多边形的内部或外部。该代码完美工作到目前为止,但我不完全理解的逻辑。请提供一个解释,如果你这样做,特别是在方法...无论是射线铸造,还是缠绕数量等。谢谢。点在多边形算法说明
function [ inside ] = inpoly(polygon,xt,yt)
rows = size(polygon);
npoints = rows(1);
disp (npoints);
inside = 0;
xold = polygon(npoints,1);
yold = polygon(npoints,2);
for i = 1:1:npoints
xnew = polygon(i,1);
ynew = polygon(i,2);
if (xnew > xold)
x1=xold;
x2=xnew;
y1=yold;
y2=ynew;
else
x1=xnew;
x2=xold;
y1=ynew;
y2=yold;
end
if ((xnew < xt) == (xt <= xold) & (yt-y1)*(x2-x1) < (y2-y1)*(xt-x1))
inside=~inside;
end
xold=xnew;
yold=ynew;
end
endfunction
为了测试该功能,例如:
inpoly([p,q],x,y)
其中p和q是多边形的顶点和点的x,y坐标。
谢谢@CiaPan,现在对我来说更加清晰。 Ray-casting的这种实现看起来相当简单。它在点位于多边形内时起作用,但当点位于边或顶点时不起作用。 –