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;
}
判断两条线段相交(跨立实验)
#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;
}
相关文章推荐
- 51nod 1264:线段相交(计算几何)
- POJ 3304 Segments <计算几何(直线与线段相交判断)>
- 51nod--1264 线段相交 (计算几何基础, 二维)
- 51nod 1264 线段相交(叉积)
- 51Nod 1264:线段相交(计算几何)
- 51nod 1264 线段相交(计算几何)
- POJ 1410 Intersection <计算几何(线段相交判断)>
- 51nod 1264 线段相交(计算几何)
- 51Nod 1264 线段相交 (计算几何)
- [51NOD]-1264 线段相交 [计算几何&叉积&点积]
- 【51Nod】1264 - 线段相交(计算几何)
- 51Nod 1264 线段相交
- 51Nod-1264-线段相交
- 51nod 1264 线段相交
- 51nod 1264 线段相交
- [caioj]【计算几何】判断线段相交(跨立实验) 计算几何 叉积
- NYOJ 83-迷宫寻宝(二)(计算几何->线段相交)
- 51Nod-1264-线段相交-【数学】
- 51Nod-1264-线段相交
- 计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)