poj-3304-Segments
2014-04-08 19:33
519 查看
#include<iostream> #include<string.h> #include<algorithm> #include<stdio.h> #include<math.h> using namespace std; #define eps 0.00000001 #define zero(x) ((fabs(x)<eps)?0:x) struct segn { double x1,y1; double x2,y2; }seg[110]; int n; struct line { int leap; double k; double b; }ll; int dos(line a,segn b) { if(a.leap==1) { if((a.b<=max(b.x1,b.x2)&&a.b>=min(b.x1,b.x2))||(!zero(a.b-b.x1)||!zero(a.b-b.x2)))return 1; else return 0; } double b1,b2,bb; b1=b.y1-a.k*b.x1; b2=b.y2-a.k*b.x2; bb=a.b; if((bb<=max(b1,b2)&&bb>=min(b1,b2))||(!zero(bb-b1)||!zero(bb-b2)))return 1; return 0; } int pan(double x1,double y1,double x2,double y2) { if(zero(x1-x2)==0) { ll.leap=1; ll.b=x1; } else { ll.leap=0; ll.b=(y1*x2/x1-y2)/(x2/x1-1); ll.k=(y1-ll.b)/x1; } for(int i=1;i<=n;i++) { if(!dos(ll,seg[i]))return 0; } return 1; } int leap; int main() { int T,i,j; cin>>T; while(T--) { leap=0; cin>>n; for(i=1; i<=n; i++) { cin>>seg[i].x1>>seg[i].y1>>seg[i].x2>>seg[i].y2; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(pan(seg[i].x1,seg[i].y1,seg[i].x2,seg[i].y2))leap=1; if(pan(seg[i].x1,seg[i].y1,seg[j].x2,seg[j].y2))leap=1; if(pan(seg[i].x1,seg[i].y1,seg[j].x1,seg[j].y1))leap=1; if(pan(seg[j].x1,seg[j].y1,seg[i].x2,seg[i].y2))leap=1; if(pan(seg[j].x1,seg[j].y1,seg[j].x2,seg[j].y2))leap=1; if(pan(seg[j].x2,seg[j].y2,seg[i].x2,seg[i].y2))leap=1; if(leap)break; } if(leap)break; } if(leap==1)cout<<"Yes!"<<endl; else cout<<"No!"<<endl; } return 0; }
—————————————————————————————————
本文原创自Slience的csdn技术博客。
本博客所有原创文章请以链接形式注明出处。
欢迎关注本技术博客,本博客的文章会不定期更新。
大多数人想要改造这个世界,但却罕有人想改造自己。
世上没有绝望的处境,只有对处境绝望的人。
————By slience
—————————————————————————————————
相关文章推荐
- POJ 3304 Segments
- poj 3304 Segments(计算几何:叉积)
- POJ 3304 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 线段与直线相交的判断
- POJ 3304 Segments 判断直线和线段相交
- poj 3304 Segments
- POJ 3304 Segments (直线与线段是否相交)
- poj 3304 Segments(线段与直线相交)
- poj 3304 Segments 直线与线段
- poj 3304 ( segments)
- POJ 3304 Segments