Segments----是否存在直线与所有线段相交
来源:互联网 发布:js 怎么生成min.js 编辑:程序博客网 时间:2024/06/03 16:46
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3492
http://poj.org/problem?id=3304
注:这两题基本上是一样的,题意都是,所有线段在某条直线的投影有公共点,问:这条直线是否存在。
所有线段在某条直线的投影有公共点 等价于 所有线段与该条直线的垂线相交。
另外该直线存在的话一定会存在通过两条线段端点的直线。
枚举两两线段的组成的四条直线,看看该条直线是否与所有线段都相交。
注2:在判断某条直线是否与所有线段相交时,使用叉积,但poj的那一题要注意精度,
double cross( point a, point b,point c) //ac{ return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}double cross( point a, point b,point c) //wa{ return (b.x-a.x)*c.y-b.x*a.y-(b.y*c.x-b.y*a.x-a.y*c.x); //把a.x*a.y约去,合并}源代码:
#include <stdio.h>#include <math.h>#define exp 1e-10#define N 405typedef struct{ double x,y;}point;point p[N],p1[N];int n,cas,flag;double cross(point a,point b,point c){ return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);}double dist(point a,point b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int judge(point a,point b){ if(dist(a,b)<exp) return 0; for(int i=0;i<n;i++) if(cross(a,b,p[i])*cross(a,b,p1[i])>exp) return 0; return 1;}int solve(){ int flag=0,cnt=0; for(int i=0;i<n;i++) if(p[i].x==p[0].x&&p[i].y==p[0].y&&p1[i].x==p1[0].x&&p1[i].y==p1[0].y) cnt++; if(cnt==n) return 1; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if(judge(p[i],p[j])||judge(p[i],p1[j])||judge(p1[i],p[j])||judge(p1[i],p1[j])) { flag=1; break; } } if(flag) break; } return flag;}int main(){ scanf("%d",&cas); while(cas--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lf %lf %lf %lf",&p[i].x,&p[i].y,&p1[i].x,&p1[i].y); flag=solve(); if(flag) printf("Yes\n"); else printf("No\n"); } return 0;}
- Segments----是否存在直线与所有线段相交
- poj 3304 Segments 【判断是否存在一条直线与所有线段相交】
- POJ 3304:Segments 计算几何 是否有直线与所有线段相交
- poj3304-Segments 是否存在直线经过所有线段
- poj 3304 Segments(贪心+直线是否与线段相交!)
- 51nod 判断线段是否相交 poj Segments直线与多条线段相交
- poj-3304-Segments-线段与直线相交
- zoj 2870 Segments 线段与直线相交
- poj 3304 Segments 线段与直线相交
- poj 3304 Segments(利用叉积求是否存在直线与所给线段相交)
- poj 3304 Segments 是否存在一条穿过所有线段的直线
- poj 3304 Segments (跟所有线段相交的直线)
- 判断直线与线段 是否相交 + 加入误差 故需要判断重点 poj 3304 Segments
- POJ 3304 Segments (计算几何、判断直线与线段是否相交)
- POJ 3304 Segments (判断直线和线段是否相交)
- poj3304-Segments-判断直线和线段是否相交
- POJ 3304 Segments(判断线段和直线是否相交)
- POJ 3304 Segments (直线与线段相交)
- 字符串与编码 汇总 概述
- Struts的核心是struts-config.xml配置文件,本文详细描述了所有的Struts组件。
- 你为什么会浮躁(摘抄)
- android.app.instrumentation解析
- eclipse CDT cygwin编译linux源代码项目
- Segments----是否存在直线与所有线段相交
- 小米2来了,国产四核谁主沉浮?
- redis初探
- 类和对象
- Walking the callstack
- 函数调用约定,_cdecl,_stdcall
- win7系统的相关的命令
- 碰撞检测
- How to Use Struts Layout