这里不用考虑线段的斜率,不会出现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;
}