POJ3304---Segments (基础计算几何:叉积判断线段相交)
来源:互联网 发布:c语言程序的基本模块 编辑:程序博客网 时间:2024/05/25 21:35
【题目来源】:https://vjudge.net/problem/POJ-3304
【题意】
给出n条线段的起始点坐标,然后问,有没有这样一条直线:所有线段在该直线上的投影至少有一个共同点。
【思路】
假设存在一条直线能与所有线段相交,那么与这条直线垂直的直线一定符合题意。至于,为什么要枚举所有端点,看到一句不错的解释:
证明:若有l和所有线段相交,则可保持l和所有线段相交,左右平移l到和某一线段交于端点停止(“移不动了”)。然后绕这个交点旋转。也是转到“转不动了”(和另一线段交于其一个端点)为止。这样就找到了一个新的l满足题意,而且经过其中两线段的端点。
【代码】
#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const double esp=1e-8;struct pp{ double lx,ly,rx,ry;} node[105];//存下所有点double s[205];//所有端点的左坐标double t[205];//所有端点的右坐标double mill(double x1,double y1,double x2,double y2,double x3,double y3){ return (x1-x2)*(y3-y2)-(x3-x2)*(y1-y2);}int main(){ int T; scanf("%d",&T); while(T--) { int n,tot=0; scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%lf%lf%lf%lf",&node[i].lx,&node[i].ly,&node[i].rx,&node[i].ry); s[++tot]=node[i].lx; t[tot]=node[i].ly; s[++tot]=node[i].rx; t[tot]=node[i].ry; } bool m=0; for(int i=1; i<=tot; i++)//枚举端点 { for(int j=i+1; j<=tot; j++) { bool flag=0; for(int k=1;k<=n;k++)//判断是不是与所有线段相交 { if(fabs(s[i]-s[j])<esp&&fabs(t[i]-t[j])<esp) { flag=1; break; } double a1=mill(s[i],t[i],s[j],t[j],node[k].lx,node[k].ly); double a2=mill(s[i],t[i],s[j],t[j],node[k].rx,node[k].ry); if(a1*a2>=esp) { flag=1; break;} } if(!flag){ m=1; break;} } if(m) break; } puts(m?"Yes!":"No!"); }}
阅读全文
0 0
- POJ3304---Segments (基础计算几何:叉积判断线段相交)
- POJ3304(计算几何基础-判断线段与直线相交)
- poj3304 Segments(计算几何+直线相交)
- Segments(poj3304,判断线段与直线相交)
- [POJ3304]Segments(计算几何)
- POJ3304 计算几何--判断直线与线段相交
- POJ3304 Segments(计算几何,线段和直线的交点)
- 【计算几何】 poj3304 Segments
- poj3304 计算几何 线段与直线相交
- POJ 3304 - Segments【计算几何 - 直线线段相交判断】
- poj3304-Segments-判断直线和线段是否相交
- POJ 3304 Segments [枚举+叉乘判断线段相交]【计算几何】
- POJ 3304 Segments(计算几何 判断直线与线段相交)
- POJ 3304 Segments (计算几何、判断直线与线段是否相交)
- POJ 3304 Segments <计算几何(直线与线段相交判断)>
- poj3304——Segments(判断直线与多个线段相交)
- POJ 3304 Segments(计算几何:直线与线段相交)
- 计算几何----判断线段相交(一)
- Java学习之反射
- js中__proto__和prototype的区别和关系?
- RTMP开发记录 测试服务器搭建篇
- 几种软件滤波方法
- 判断单链表有环的三种方法
- POJ3304---Segments (基础计算几何:叉积判断线段相交)
- java解析JSONArray对象
- 卷积神经网络实践
- Windows搭建GitHub
- Hive基础使用
- AJAX
- 安卓广播之各类型广播的记录
- javap 反编译Atomicity 1.5.0_22和1.8.0_111的区别
- vs2013-cdkey