码迷,mamicode.com
首页 > 其他好文 > 详细

使用叉积判断两条直线是否相交

时间:2015-06-06 14:49:41      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

两条平面直线是否相交(直线长度大于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\n");
   else
       printf("no\n");
 }
    return 0;
}

 

使用叉积判断两条直线是否相交

标签:

原文地址:http://www.cnblogs.com/chen9510/p/4556544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!