您的位置:首页 > 其它

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

2017-10-24 15:24 316 查看
题目链接

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

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: