判断点Q在线段l上要满足两个条件:
1.Q在直线I上;
2.Q在以线段I为对角线的矩形内。(为了保证不在线段的反向延长线上)
对于条件1,可以根据叉乘计算,叉积为0,表示Q点和线段的两个端点共线。
对于条件2,a.x < c.x < b.x ,a.y < c.y < b.y。
//判断点p是否在线段l上
//条件:(p在线段l所在的直线上) && (点p在以线段l为对角线的矩形内)
bool online(LINESEG l,POINT p)
{
return( (multiply(l.e,p,l.s)==0) &&( ( (p.x-l.s.x)*(p.x-l.e.x)<=0 )&&( (p.y-l.s.y)*(p.y-l.e.y)<=0 ) ) );
}