题目大意:给出一些线段,然后判断这些线段的投影是否有可能存在一个公共点。
 
分析:如果这些线段的投影存在一个公共点,那么过这个公共点作垂线一定与所有的直线都想交,于是题目转化成是否存在一个直线可以经过所有的线段,考虑线段并不多,所以可以枚举任意两点当作直线......
 
代码如下:
=============================================================================================================================
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std; const int MAXN = ;
const double ESP = 1e-; struct Point
{
double x, y; Point(double x=, double y=):x(x), y(y){}
Point operator + (const Point &tmp) const{
return Point(x+tmp.x, y+tmp.y);
}
Point operator - (const Point &tmp) const{
return Point(x-tmp.x, y-tmp.y);
}
bool operator ==(const Point &tmp) const{
return (fabs(x-tmp.x) < ESP) && (fabs(y-tmp.y) < ESP);
}
int operator * (const Point &tmp) const{
double t = x*tmp.y - y*tmp.x; if(t > ESP)return ;
if(fabs(t) < ESP)return ;
return -;
}
};
struct Segment
{
Point A, B;
Segment(Point t1=, Point t2=){A=t1, B=t2;}
};
bool Find(Segment t, Segment seg[], int N)
{
for(int i=; i<=N; i++)
{///使用叉积判断是否想交
int k = fabs((t.A-t.B)*(seg[i].A-t.B) + (t.A-t.B)*(seg[i].B-t.B)); if(k==)return false;
} return true;
} int main()
{
int N, T; scanf("%d", &T); while(T--)
{
double x1, x2, y1, y2;
Point p[MAXN];
Segment seg[MAXN]; scanf("%d", &N); int M=; for(int i=; i<=N; i++)
{
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
p[M++]=Point(x1, y1), p[M++]=Point(x2, y2);
seg[i]=Segment(p[M-], p[M-]);
} int ok = false; for(int i=; i<M && !ok; i++)
for(int j=i+; j<M && !ok; j++)
{
if(p[i] == p[j])
continue; ok = Find(Segment(p[i], p[j]), seg, N);
} if(ok)printf("Yes!\n");
else printf("No!\n");
} return ;
}

Segments - POJ 3304 (判断直线与线段是否相交)的更多相关文章

  1. POJ 3304 Segments(判断直线与线段是否相交)

    题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...

  2. C - Segments POJ - 3304 (判断线段相交)

    题目链接:https://vjudge.net/contest/276358#problem/C 题目大意:给你n条线段,问你是否存在一条线段使得所有的线段在这条直线的投影至少具有一个交点? 具体思路 ...

  3. POJ 2074 /// 判断直线与线段相交 视野盲区

    题目大意: 将所有物体抽象成一段横向的线段 给定房子的位置和人行道的位置 接下来给定n个障碍物的位置 位置信息为(x1,x2,y) 即x1-x2的线段 y相同因为是横向的 求最长的能看到整个房子的一段 ...

  4. 判断直线与线段相交 POJ 3304 Segments

    题意:在二维平面中,给定一些线段,然后判断在某直线上的投影是否有公共点. 转化,既然是投影,那么就是求是否存在一条直线L和所有的线段都相交. 证明: 下面给出具体的分析:先考虑一个特殊的情况,即n=1 ...

  5. POJ 3304 Segments 判断直线和线段相交

    POJ 3304  Segments 题意:给定n(n<=100)条线段,问你是否存在这样的一条直线,使得所有线段投影下去后,至少都有一个交点. 思路:对于投影在所求直线上面的相交阴影,我们可以 ...

  6. POJ 3304 Segments (判断直线与线段相交)

    题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...

  7. POJ 3304 Segments(计算几何:直线与线段相交)

    POJ 3304 Segments 大意:给你一些线段,找出一条直线可以穿过全部的线段,相交包含端点. 思路:遍历全部的端点,取两个点形成直线,推断直线是否与全部线段相交,假设存在这种直线,输出Yes ...

  8. Segments POJ 3304 直线与线段是否相交

    题目大意:给出n条线段,问是否存在一条直线,使得n条线段在直线上的投影有至少一个公共点. 题目思路:如果假设成立,那么作该直线的垂线l,该垂线l与所有线段相交,且交点可为线段中的某两个交点 证明:若有 ...

  9. poj 3304 判断是否存在一条直线与所有线段相交

    Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8579   Accepted: 2608 Descript ...

随机推荐

  1. 选取两个有序数组中最大的K个值,降序存入另一个数组中

    原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...

  2. 用3种方法在 operator= 中处理“自我赋值”

    假设你建立一个class 用来保存一个指针指向一块动态分配的位图. class Bitmap {......}; class Widget{ ... private: Bitmap* pb ; }; ...

  3. 《C++ Primer》P314中使用insert重写单词统计程序的扩展

    编写程序统计并输出所读入的单词出现的次数 想与习题10-1相结合,也就是先输入几组 map<string, int>类型,存入vector中. 再输入单词word,如果已经存在则在key对 ...

  4. hdu Train Problem I(栈的简单应用)

    Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot o ...

  5. x的平方根

    class Solution { public: /** * @param x: An integer * @return: The sqrt of x */ int getResult(long s ...

  6. 浏览器阻止window.open的解决方案

    先分析一下浏览器为什么会阻止window.open吧:用户主动去触发事件的浏览器不会阻止,什么是用户主动触发的呢?就是当用户去点击的一瞬间就弹出这种浏览器是不会阻止的,如果是通过setTimeout定 ...

  7. 设置(TableViewController)通用框架

    本文学习于传播播客.李明杰老师.感谢

  8. ubuntu 下截图工具的使用

    我个人觉得,ubuntu自带的截图工具功能就不错.具体使用如下: 在ubuntu下的系统设置中找到硬盘区的“键盘”处,进入该设置界面如下: 选择标签“快捷键”,进入新设置界面如下所示: 之后,你就可以 ...

  9. 如何在eclips下将一段代码抽取为方法Extract Method

    最近读了读关于重构的文章,做了个小总结(在编程思想目录下<从文章"避免复制与粘贴"到文章"Extract Method"的反思 系列>). 然后因为 ...

  10. 使用URLClassLoader类载入类实例

    Tomcat当中在接受到要调用的Servlet请求后,需要载入相应的Servlet类,然后创建Servlet类实例,从而调用Servlet类实例的service()方法 下面实例的场景,request ...