51nod 1264 线段相交(计算几何)
来源:互联网 发布:涉密软件资质 编辑:程序博客网 时间:2024/06/16 11:08
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;/*计算几何输入两条线段的四个端点,判断两直线是否相交*/const double esp=1e-7;int sgn(double x){ if(fabs(x)<esp) return 0; if(x<0) return -1; else return 1;}struct Point{ double x,y; Point() {} Point(double _x,double _y) { x=_x; y=_y; } Point operator -(const Point &b) const { return Point(x-b.x,y-b.y); } double operator ^ (const Point &b) const//叉积 { return x*b.y-y*b.x; } double operator * (const Point &b) const//点积 { return x*b.x+y*b.y; } double distance(Point p)//两点距离 { return hypot(x-p.x,y-p.y); //return (x-p.x)*(x-p.x)+(y-p.y)*(y-p.y); }};struct Line{ Point s,e; Line(){} Line(Point _s,Point _e) { s=_s; e=_e; } double length()//线段长度 { return s.distance(e); } double dispointtoline(Point p)//点到直线距离 { return fabs((p-s)^(e-s))/length(); } double dispointtoseg(Point p)//点到线段距离 { if(sgn((p-s)*(e-s))<0||sgn((p-e)*(s-e))<0) return min(p.distance(s),p.distance(e)); return dispointtoline(p); } //两线段相交判断 //2 规范相交 1 非规范相交 0 不相交 int segcrossseg(Line v) { int d1=sgn((e-s)^(v.s-s)); int d2=sgn((e-s)^(v.e-s)); int d3=sgn((v.e-v.s)^(s-v.s)); int d4=sgn((v.e-v.s)^(e-v.s)); if((d1^d2)==-2&&(d3^d4)==-2) return 2; return (d1==0&&sgn((v.s-s)*(v.s-e))<=0) ||(d2==0&&sgn((v.e-s)*(v.e-e))<=0) ||(d3==0&&sgn((s-v.s)*(s-v.e))<=0) ||(d4==0&&sgn((e-v.s)*(e-v.e))<=0); }};int main(){ int t; scanf("%d",&t); while(t--) { Point point[4]; for(int i=0;i<4;i++) { scanf("%lf%lf",&point[i].x,&point[i].y); } Line line[2]; line[0]=Line(point[0],point[1]); line[1]=Line(point[2],point[3]); int flag=line[0].segcrossseg(line[1]); if(flag) { printf("Yes\n"); } else { printf("No\n"); } } return 0;}
阅读全文
0 0
- 51nod--1264 线段相交 (计算几何基础, 二维)
- 【51Nod】1264 - 线段相交(计算几何)
- 51Nod 1264 线段相交 (计算几何)
- 51nod 1264 线段相交(计算几何)
- 51nod 1264 线段相交(计算几何)
- 51Nod 1264:线段相交(计算几何)
- [51NOD]-1264 线段相交 [计算几何&叉积&点积]
- 51nod 1264 线段相交(几何)
- 51nod:1264 线段相交(数学几何)
- 1264 线段相交(几何计算)
- 1264 线段相交(计算几何)
- 51nod oj 1264 线段相交【数学几何】
- 【计算几何】线段相交
- 51nod 1264 线段相交 (模板)
- 51nod 1264 线段相交(叉积)
- 51Nod 1264 线段相交 <叉积计算>
- 51NOD1264 线段相交(计算几何)
- 计算几何:线段相交(迷宫寻宝)
- 給自己生活的忠告,每天看一遍~~~~~~
- 关于中国道德
- 转:很经典的-我是一个硬盘
- glActiveTexture和glBindTexture的区别和联系
- PING命令中TTL的具体含义
- 51nod 1264 线段相交(计算几何)
- QT中QWidget、QDialog及QMainWindow的区别
- 了解一下女人~~ 哈哈哈
- Linux最新稳定内核2.4.x的网络接口源码的结构2
- Linux最新稳定内核2.4.x的网络接口源码的结构1
- PING命令中TTL的具体含义
- Socket编程基础
- 转:很经典的-我是一个硬盘
- 基于单片机的嵌入式系统网络接入方案