判断点是否在线段上

设有点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;
    }
}

 由于要考虑水平线段和垂直线段两种特殊情况,所以横纵坐标都得判断

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/81735132