计算几何之两线段相交
2015-12-23 20:13
253 查看
http://poj.org/problem?id=2653
const double eps=1e-8; int cmp(double x){ if(fabs(x)<eps)return 0; if(x>0)return 1; return -1; } struct point{ double x,y; point(){} point(double a,double b):x(a),y(b){} void input(){ scanf("%lf%lf",&x,&y); } }; double det(const point &a,const point &b){ return a.x*b.y-b.x*a.y; } struct line{ point a,b; line(){} line(point x,point y):a(x),b(y){} }l[100010]; bool judge(const line a,const line b){//判断线段a,b是否相交 double x1=a.a.x,x2=a.b.x,x3=b.a.x,x4=b.b.x; double y1=a.a.y,y2=a.b.y,y3=b.a.y,y4=b.b.y; if(max(x1,x2)<min(x3,x4))return false; if(max(y1,y2)<min(y3,y4))return false; if(max(x3,x4)<min(x1,x2))return false; if(max(y3,y4)<min(y1,y2))return false; if(cmp(det(point(x2-x1,y2-y1),point(x4-x1,y4-y1))*det(point(x2-x1,y2-y1),point(x3-x1,y3-y1)))>0)return false; if(cmp(det(point(x4-x3,y4-y3),point(x1-x3,y1-y3))*det(point(x4-x3,y4-y3),point(x2-x3,y2-y3)))>0)return false; return true; }
相关文章推荐
- LeetCode 1 Two Sum
- leetcode刷题日记——Implement Stack using Queues
- Oracle合并多列到一行wm_concat
- 二叉树——中序、后序遍历得先序遍历
- 归并排序
- Hadoop三种安装模式
- Java中super的几种用法及与this的区别
- unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
- 排列问题
- 排列问题
- Java ArrayList的equals方法
- 死机案例分析1
- android中Bitmap用法(显示,保存,缩放,旋转)实例分析
- 多线程与线程同步问题
- Oracle表空间的一些介绍
- Dockerfile(SSH+iperf)
- android权重
- Caffe学习系列(3):视觉层(Vision Layers)及参数
- 不可忽略的知识点
- CSS3响应式设计