51Nod 1264 线段相交 <叉积计算>

来源:互联网 发布:淘宝话费红包怎么用 编辑:程序博客网 时间:2024/06/10 13:19

题目链接


判断两条线段相交(跨立实验)


#include<iostream>    #include<cstdio>    #include<math.h>    #include<cstring>    #include<algorithm>    #include<queue>    #include<set>    #include<vector>    using namespace std;    typedef struct Node{double x,y;};Node n1,n2,n3,n4;double chaji(Node n0,Node n1,Node n2){      return (n1.x-n0.x)*(n2.y-n0.y)-(n2.x-n0.x)*(n1.y-n0.y);  }  int check(){/*no n1,n2,n3,n4;n1.x=node[0].x1;n1.y=node[0].y1;n2.x=node[0].x2;n2.y=node[0].y2;n3.x=node[1].x1;n3.y=node[1].y1;n4.x=node[1].x2;n4.y=node[1].y2;*/if(chaji(n4,n3,n1)*chaji(n4,n3,n2)<0&&chaji(n1,n2,n3)*chaji(n1,n2,n4)<0) return 1;if(chaji(n1,n2,n3)==0&&n3.x<=max(n1.x,n2.x)&&n3.x>=min(n1.x,n2.x) ||    chaji(n1,n2,n4)==0&&n4.x<=max(n1.x,n2.x)&&n4.x>=min(n1.x,n2.x) ||   chaji(n3,n4,n1)==0&&n1.x<=max(n3.x,n4.x)&&n1.x>=min(n3.x,n4.x) ||   chaji(n3,n4,n2)==0&&n2.x<=max(n3.x,n4.x)&&n2.x>=min(n3.x,n4.x)) return 1;   return 0;}int main(){      int n;    cin>>n;    for(int i=0;i<n;i++){    scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&n1.x,&n1.y,&n2.x,&n2.y,&n3.x,&n3.y,&n4.x,&n4.y);    if(check()){    printf("Yes\n");}else printf("No\n");}    return 0;  }


原创粉丝点击