题目链接:点击查看

题目大意:给出n条线段,现在问是否存在一条直线,使得所有线段向这条直线的投影存在一个共同的交点

题目分析:题意有点抽象,需要转换一下,因为所有的线段向某一条直线的投影存在一个交点,那么在那条直线上,从交点位置开始,沿着垂直于直线的方向做另一条直线,会发现这条直线与n条线段都存在一个交点,也就是都相交,这样题目就转换为了是否存在一条直线,使得与n条线段都有交点

因为直线也是由两个点组成的,我们枚举所有线段上的点,作为构成直线上的两个点,每次判断一下是否满足条件即可,时间复杂度为(2*n)*(2*n)*n,因为n比较小,所以直接实现就行了

有个细节需要注意一下,可能会有两个点重合的情况,这个时候需要特判一下

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;const double eps = 1e-8;int n;int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;
}struct Point{double x,y;Point(){}Point(double _x,double _y){x = _x;y = _y;}void input(){scanf("%lf%lf",&x,&y);}double distance(Point p){return hypot(x-p.x,y-p.y);}Point operator -(const Point &b)const{return Point(x-b.x,y-b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}
};struct Line{Point s,e;Line(){}Line(Point _s,Point _e){s = _s;e = _e;}void input(){s.input();e.input();}//`直线和线段相交判断`//`-*this line   -v seg`//`2 规范相交`//`1 非规范相交`//`0 不相交`int linecrossseg(Line v){int d1 = sgn((e-s)^(v.s-s));int d2 = sgn((e-s)^(v.e-s));if((d1^d2)==-2) return 2;return (d1==0||d2==0);}
}line[N];bool check(Line l)
{if(sgn(l.s.distance(l.e))==0)return false;for(int i=1;i<=n;i++)if(!l.linecrossseg(line[i]))return false;return true;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){vector<Point>point;scanf("%d",&n);for(int i=1;i<=n;i++){line[i].input();point.push_back(line[i].s);point.push_back(line[i].e);}for(int i=0;i<point.size();i++)for(int j=0;j<point.size();j++)if(check(Line(point[i],point[j]))){puts("Yes!");goto end;}puts("No!");    end:;}return 0;
}

POJ - 3304 Segments(简单几何)相关推荐

  1. poj 3304 Segments

    poj 3304 Segments (计算几何水题) 链接:http://poj.org/problem?id=3304 题意:找出一条直线,使得给出的所有线段在这个直线上的投影有交集. 思路:找出一 ...

  2. poj 3304 Segments (几何 : 线段 直线相交)

    http://poj.org/problem?id=3304 题意:求是否存在一条直线,使所有线段到这条直线的投影至少有一个交点. 题解": 1:把问题转化为是否存在一条直线与每条线段都有交 ...

  3. 判断直线与线段 是否相交 + 加入误差 故需要判断重点 poj 3304 Segments

    题目来源:http://poj.org/problem?id=3304 分析: 题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出 ...

  4. Segments POJ - 3304(判断直线知否经过所有线段)

    Segments POJ - 3304 题意:给n个线段的端点,问你将这些线段都投影到同一条直线上是否所有的线段都有交点. 思路:如果可以有一条直线可以穿过所有的线段的话那么就存在题意中的直线. #i ...

  5. python画三维几何图-Python下opencv使用笔记(二)(简单几何图像绘制)

    简单几何图像一般包含点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义. 图像的一个像素点有1或者3个值.对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值.他们表现出 ...

  6. 判断线段和直线相交 POJ 3304

    1 // 判断线段和直线相交 POJ 3304 2 // 思路: 3 // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. 4 5 #include ...

  7. Python下opencv使用笔记(二)(简单几何图像绘制)

    简单几何图像一般包括点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义.图像的一个像素点有1或者3个值,对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值,他们表现出不 ...

  8. 【计算机图形学实验四——简单几何形体的平移、缩放、旋转等几何变换】

    一.实验内容.目的.要求 1.简单几何形体(三角形.多边形等)的平移.缩放.旋转等几何变换. 2.掌握相关算法的原理及实现 3.实现基础代码(非调用OpenGL等图形库): 缩放.旋转等能指定变换参考 ...

  9. 2021牛客暑期多校训练营2 F Girlfriend (阿波罗尼斯圆+简单几何)

    F Girlfriend (阿波罗尼斯球+简单几何) 题目大意: 给定四个点,每两个点构成一个阿波罗尼斯球,求两圆相交部分的体积. 思路: 一看就是几何题啊,话不多说直接开淦... 首先对于阿波罗尼斯 ...

最新文章

  1. 盘点2018年计算机视觉领域技术突破
  2. 算法导论 6.2-5
  3. php查询mysql并缓存到redis
  4. 结合MongoDB开发LBS应用
  5. Ubuntu建立(apache+php+mysql)+phpmyadmin
  6. Spring-mybatis 抽取 baseDao。
  7. 数据库开发——MySQL——单表查询
  8. Codeforces Global Round 15 (A-D)没有C
  9. FreeModbus RTU传输
  10. linux 6.3 ftp安装,CentOS6.3下安装VSFTP服务
  11. LaTeX插入Visio绘图,文字模糊
  12. 共轭梯度法(CG)详解
  13. viper4android最新,蝰蛇音效viper4android rx-ViPER4Android FX开发版下载v2.6.0.2安卓正式版-西西软件下载...
  14. 计算机网络习题集与习题解析 pdf,计算机网络习题集与答案.pdf
  15. 服务器上系统使用排行,服务器操作系统使用排行榜
  16. SQL中计算字符串的长度函数
  17. batchnomal_Linux Kernel 排程機制介紹 ? Loda's blog
  18. Esp8266(WIFI模块)刷阿里云固件
  19. 使用css定位--让foot层始终保持在页面底部
  20. psycopg2.errors.DatatypeMismatch: 错误: 无法实现外键约束 “sale_an_product_tax_id_fkey“

热门文章

  1. MySQL查看索引使用情况
  2. MyBatis 插件怎么编写和使用?原理是什么?
  3. ClassPathScanningCandidateComponentProvider 扫描给定包及其子包的类
  4. 基于Xml 的IOC 容器-开始启动
  5. 获取class文件对象三种方式
  6. 数据库-优化-pt-query-digest使用简介
  7. 数据库-优化-pt-query-digest安装
  8. Ribbon-3使用配置文件自定义Ribbon Client
  9. tab栏切换 动画的相关方法上 动画的相关方法下 隐藏动画案例 隐藏动画练习
  10. mysql主机咋填_mysql数据库主机填什么