常用叉乘来判断两线段或两直线是否相交。
假设a和b是两个向量, 那么它们的叉积c=aXb可如下严格定义。
|c|=|a×b|=|a||b|sin<a,b>,那么我们可以利用sin<a,b>的正负来判断B线段一端点在A线段的左还是右,注意:判断线段相交要利用4个端点做叉乘,如图所示
若 P × Q > 0 , 则P在Q的顺时针方向。
若 P × Q < 0 , 则P在Q的逆时针方向。
若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向
bool f(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)///判两线段是否相交,4次叉乘///
{
int s1=(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1);int s2=(x2-x1)*(y4-y1)-(y2-y1)*(x4-x1);
int s3=(x4-x3)*(y1-y3)-(y4-y3)*(x1-x3);int s4=(x4-x3)*(y2-y3)-(y4-y3)*(x2-x3);
if(s1*s2<=0 && s3*s4<=0)
return false;
else
return true;
}