在研究线段相交之前,我们首先来看一下点定位中是如何判断点是否在线段上的:
设有点Q及线段P1P2,判断Q在线段P1P2上包括两条依据:
(1)(Q-P1)×(P2-P1)=0(这里×表示叉积);
(2)Q在以P1P2为对角线的矩形内。
前者保证了Q在直线P1P2上,后者保证了点Q不在线段P1P2的延长线或反向延长线上。
代码入下:
typedef struct node
{
double x,y;
}Point;
bool on_segment(Point p1,Point p2,Point q)
{
if((q.x-p1.x)*(p2.y-p1.y)==(p2.x-p1.x)*(1.y-p1.y)&&min(p1.x,p2.x)<=q.x&&q.x<=max(p1.x,p2.x)&&min(p1.y,p2.y)<=q