【叉乘判相交】

常用叉乘来判断两线段或两直线是否相交。

假设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;
}


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值