zoukankan      html  css  js  c++  java
  • 使用叉积判断两条直线是否相交

    两条平面直线是否相交(直线长度大于0,可以重叠)

    直线为(x1,y1),(x2,y2)和(x3,y3),(x4,y4)

    #include <iostream>

    using namespace std;

    int cj(int a1,int a2,int b1,int b2,int c1,int c2)
    {
         return (c1-a1)*(b2-a2)-(c2-a2)*(b1-a1);
    }

    int main()
    {
        int x1,x2,x3,x4,y1,y2,y3,y4;
       while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4)
    {
       int flag=0;
       if(cj(x1,y1,x2,y2,x3,y3)*cj(x1,y1,x2,y2,x4,y4)<0&&cj(x2,y2,x1,y1,x3,y3)*cj(x2,y2,x1,y1,x4,y4)<0&&cj(x3,y3,x4,y4,x1,y1)*cj(x3,y3,x4,y4,x2,y2)<0)
              flag=1;
       else if(cj(x1,y1,x2,y2,x3,y3)==0&&((x3>=x1&&x3<=x2)||(x3>=x2&&x3<=x1))&&cj(x1,y1,x2,y2,x4,y4)!=0)
              flag=1;
       else if(cj(x1,y1,x2,y2,x4,y4)==0&&((x4>=x1&&x4<=x2)||(x4>=x2&&x4<=x1))&&cj(x1,y1,x2,y2,x3,y3)!=0)
              flag=1;
       else if(cj(x3,y3,x4,y4,x1,y1)==0&&((x1>=x3&&x1<=x4)||(x1>=x4&&x1<=x3))&&cj(x3,y3,x4,y4,x2,y2)!=0)
              flag=1;
       else if(cj(x3,y3,x4,y4,x2,y2)==0&&((x2>=x3&&x2<=x4)||(x2>=x4&&x2<=x3))&&cj(x3,y3,x4,y4,x1,y1)!=0)
              flag=1;
       if(flag==1)
           printf("yes ");
       else
           printf("no ");
     }
        return 0;
    }

  • 相关阅读:
    MIKROTIK ROS+PHP+MYSQL实现从数据库中配置DNS服务器
    随手记
    05 通过python开启静态http服务
    名称空间和作用域
    cs常用功能
    初识Cobalt Strike
    msf之手机木马生成&利用
    msf之meterpreter命令
    BURPSUITE的常用模块
    BURPSUITE专业汉化版安装
  • 原文地址:https://www.cnblogs.com/chen9510/p/4556544.html
Copyright © 2011-2022 走看看