新发现判断一个点在多边形的最高效率算法 推荐******

本文介绍了一种用于判断点是否位于多边形内部的算法实现。该算法通过扫描线方法,针对多边形的每条边检查点的位置,并依据交叉次数确定点是否在多边形内部。适用于地图信息系统(MGIS)等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

////////////////////////////////////////////////////////////////
//计算点是否在多边形内
int msIntersectPointPolygon(pointObj *point, shapeObj *poly)
{//主函数1-在 0-不在
 int i;
 int status=MS_FALSE;
 for(i=0; i<poly->numlines; i++)
 {
   if(msPointInPolygon(point, &poly->line[i]) == MS_TRUE) /* ok, the point is in a line */
      status = !status;
  }
  return(status);
}

 

int msPointInPolygon(pointObj *p, lineObj *c)
{//算法非常奇怪!!!
 int i, j, status = MS_FALSE;
 for (i = 0, j = c->numpoints-1; i < c->numpoints; j = i++)
{ if ((((c->point[i].y<=p->y) && (p->y<c->point[j].y)) || ((c->point[j].y<=p->y) && (p->y<c->point[i].y))) && (p->x < (c->point[j].x - c->point[i].x) * (p->y - c->point[i].y) /(c->point[j].y - c->point[i].y) + c->point[i].x))
      status = !status; 
}
 return status;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值