设有点Q以及p1p2,判断点Q在线段p1p2上包含两条依据:
1.(Q-p1)*(p2-p1)=0(叉乘)
2.Q在以p1,p2位对顶顶点的矩形内
前者保证了点Q在直线p1p2上,后者保证了点Q不在线段p1p2的延长线或者反向延长线上。
bool onsegment(point pi,point pj,point Q)
{
if((Q.x-pi.x)*(pj.y-pi.y)==(pj.x-pi.x)*(Q.y-pi.y)&&min(pi.x,pj.x)<=Q.x&&Q.x<=max(pi.x,pj.x)&&min(pi.y,pj.y)<=Q.y&&Q.y<=max(pi.y,pj.y)){
return true;
}else{
return false;
}
}
由于要考虑水平线段和垂直线段两种特殊情况,所以横纵坐标都得判断