POJ 3304 直线与线段相交的判断
来源:互联网 发布:大数据项目知识点 编辑:程序博客网 时间:2024/06/08 15:27
参考:
http://blog.sina.com.cn/s/blog_6635898a0100n2lv.html
的证明过程
可将问题转化为是否存在一条直线经过所有的线段的判断问题
#include<iostream>#include<cmath>#include<cstdio> using namespace std;const int MAX = 105;const double eps = 1e-8;struct Point{ double x,y;}s[MAX],e[MAX];int n;double mult(Point sp,Point ep,Point op){ return (sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y);}bool solve(Point p1,Point p2){ if(abs(p1.x-p2.x)<eps && abs(p1.y-p2.y)<eps) return false; for(int i=0;i<n;i++) if(mult(p1,p2,s[i])*mult(p1,p2,e[i])>eps) return false; return true;}int main(){ //freopen("input.txt","r",stdin); int t; cin>>t; while(t--){ cin>>n; for(int i=0;i<n;i++) cin>>s[i].x>>s[i].y>>e[i].x>>e[i].y; bool flag=false; if(n<3) flag=true; for(int i=0; i<n && !flag ;i++){ for(int j=i+1; j<n && !flag ;j++){ if(solve(s[i],s[j])) flag=true; else if(solve(s[i],e[j])) flag=true; else if(solve(e[i],s[j])) flag=true; else if(solve(e[i],e[j])) flag=true; } } if(flag) cout<<"Yes!"<<endl; else cout<<"No!"<<endl; }}
0 0
- POJ 3304 判断直线与线段相交
- POJ 3304 判断线段 与 直线 相交
- poj 3304 判断直线与线段相交
- POJ 3304 直线与线段相交判断
- POJ 3304 直线与线段相交的判断
- poj 3304 Segments(判断直线与线段相交)
- POJ 3304 Segments 判断直线与线段相交
- POJ 3304 判断线段和直线相交
- poj 3304 判断是否有与所有线段相交的直线
- POJ 3304 Segment 直线与线段相交
- POJ 3304 Segment 直线与线段相交
- poj-3304-Segments-线段与直线相交
- poj 3304 Segments 线段与直线相交
- poj 3304Segments(直线与线段的相交关系)
- 判断直线与线段 是否相交 + 加入误差 故需要判断重点 poj 3304 Segments
- POJ - 3304 :Segments__判断直线和线段是否 相交
- POJ 3304 Segments (判断直线和线段是否相交)
- poj 3304 Segments(判断线段和直线相交)
- codeforces 711D. Directed Roads 找环
- C++正则表达式使用实例--实现一个markdown代码标记转换工具
- ReplaceBlank
- translate函数的用法
- 链表的排序
- POJ 3304 直线与线段相交的判断
- Google APAC 2017 University Test Round B
- LeetCode练习与总结
- iOS基础知识点
- 文章标题
- 欢迎使用CSDN-markdown编辑器
- 关于ubuntu浏览器模糊不清的解决方法
- java web 02 关于JSP跳转中request共享问题
- Debian 安装缺少 iwlwifi