这里不用考虑线段的斜率,不会出现0作除数的bug,因为端点y值与目标点y值相等的时候,会认为端点在上面,参考程序中的>=y
bool DataConvert::isInsidePoly(const QPointF &iPoint,const QPolygonF &iMyPoly)
{
qreal x=iPoint.x(),y=iPoint.y();
int left=0;
int right=0;
int j=iMyPoly.size()-1;
for(int i=0;i<iMyPoly.size();i++){
if((iMyPoly[i].y()<y&&iMyPoly[j].y()>=y)||(iMyPoly[j].y()<y&&iMyPoly[i].y()>=y)){
if((y-iMyPoly[i].y())*(iMyPoly[i].x()-iMyPoly[j].x())/(iMyPoly[i].y()-iMyPoly[j].y())+iMyPoly[i].x()<x){
left++;
}
else right++;
}
j=i;
}
return left&right;
}
本文介绍了一种用于判断一个点是否位于给定多边形内的算法实现。该算法通过比较点与多边形各边的关系来确定位置,并避免了除数为零的情况。代码示例使用QPointF和QPolygonF类型,适用于Qt开发环境。
3445

被折叠的 条评论
为什么被折叠?



