这里判断点和线的关系要用到矢量乘法
1.矢量叉积
设矢量P = (x1,y1) ,Q = (x2,y2)
则矢量叉积定义为: P × Q = x1*y2 - x2*y1 得到的是一个标量
显然有性质 P × Q = - ( Q × P ) P × ( - Q ) = - ( P × Q )
如不加说明,下面所有的点都看作矢量,点的乘法看作矢量叉积;
叉乘的重要性质:
> 若 P × Q > 0 , 则P 在Q的顺时针方向
> 若 P × Q < 0 , 则P 在Q的逆时针方向
> 若 P × Q = 0 , 则P 与Q共线,但可能同向也可能反向
int getRefLine0Line1(POINT l0s,POINT l0e,POINT l1s,POINT l1e)
{
int ret = 0;
float dx0 = (l0e.x - l0s.x),dy0 = (l0e.y - l0s.y);
float dx1 = (l1e.x - l1s.x),dy1 = (l1e.y - l1s.y);
float val = dx0 * dy1 - dx1 * dy0;
if(val < 0) //Line0在Line1上
{
ret = 0;
}
else if(val > 0)//Line0在Line1下
{
ret = 1;
}
else //Line0在Line1里
{
ret = 2;
}
return ret;
}