昨天小学了一点计算几何学的内容,想把它记下来,以便以后翻阅。
1.判断点是否在多边形中
先说一下思路:
判断点(P)是否在多边形中,可以先以点p向左引一条射线(L),我们知道,从射线L左端的无穷远处开始一直到点P的过程中,当遇到多边形的第一个交点时L进入了多边形,当遇到第二个交点时,L穿出了多边形。。。。。。。。。可知,规律如下,当在遇到P点之前L与多边形的交点为偶数个时,说明p点不在多边形内,当在遇到p点之前L与多边形得交点为奇数个时,说明P点在多边形内。
但是,这个规律并不具有普遍性,还有几种特殊情况不满足此规律,需要额外考虑:
(1)当点P在多边形的某条边上时,可以直接判断其在多边形中。
(2)对于多边形的水平边不作考虑。
(3)对于多边形的顶点与L相交,则需要判断该顶点是否为顶点所在的边的那个纵坐标较大的顶点,如果是较大的那个顶点与L相交则计数,否则忽略。
伪代码如下:
........fun()
{
int
count=0;
//以P为端点从右向左引一条射线L
for
(多边形的每一条边S)
//遍历多边形的每一条边
{
if
(P在边S上)
{
return
ture;
}
if
(S不是水平的)
<
|

这篇博客介绍了计算几何中的问题,如何判断一个点是否在多边形内部,以及线段是否在多边形内。通过射线法,结合特殊情况的处理,如点在边上、水平边、顶点与射线相交等,给出了判断点在多边形内的伪代码。同时,对于线段是否在多边形内,需要检查端点位置及与多边形边的交点情况。
最低0.47元/天 解锁文章
664





