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

时间:2022-11-13 07:51:36
题目大意:给出一些线段,然后判断这些线段的投影是否有可能存在一个公共点。
 
分析:如果这些线段的投影存在一个公共点,那么过这个公共点作垂线一定与所有的直线都想交,于是题目转化成是否存在一个直线可以经过所有的线段,考虑线段并不多,所以可以枚举任意两点当作直线......
 
代码如下:
=============================================================================================================================
#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 &lpar;判断线段相交&rpar;

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

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

    题目大意: 将所有物体抽象成一段横向的线段 给定房子的位置和人行道的位置 接下来给定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 &lpar;判断直线与线段相交&rpar;

    题目链接: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. fstream 坑解决办法

    status_t SysWatcher::setWVer() {     fstream myfile;     myfile.open("/data/w_version", io ...

  2. 一步一步写算法(之hash表)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...

  3. MySQL5&period;1升级5&period;6后,执行grant出错:ERROR 2013 &lpar;HY000&rpar;&colon; Lost connection to MySQL server during query【转载】

    转载: MySQL5.5升级5.6后,执行grant出错:ERROR 2013 (HY000): Lost connection to -mysql教程-数据库-壹聚教程网http://www.111 ...

  4. zabbix 邮件报警配置

    zabbxi 邮件告警推送有两种方式: 1.使用zabbix服务端的本地邮箱账号发送,邮件名为:user@hostname.localdomain,user为发送邮件的用户,hostname为zabb ...

  5. hashCode和equals的关系分析

    hashCode:说白了,简单的就看做一个函数,但是该函数有可能出现:对于某个x值,存在不止一个y值与之对应.这种情况就叫哈希碰撞. 那么: 1.如果hashCode相等,两个对象不一定是同一个对象( ...

  6. MISCONF Redis is configured to save RDB snapshots&comma; but it is currently not able to persist on disk&period; Commands that may modify the data set are disabled&comma; because this instance is configured to report e

    早上来到公司,线上的项目报错: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionExcepti ...

  7. 基于CMS的组件复用实践

    目前前端项目大多基于Vue.React.Angular等框架来实现,这一类框架都有一个明显的特点:基于模块化以及组件化思维.所以,开发者在使用上述框架时,实际上是在写一个一个的组件,并且组件与组件之间 ...

  8. 傻瓜式解读koa中间件处理模块koa-compose

    最近需要单独使用到koa-compose这个模块,虽然使用koa的时候大致知道中间件的执行流程,但是没仔细研究过源码用起来还是不放心(主要是这个模块代码少,多的话也没兴趣去研究了). koa-comp ...

  9. SpringMVC如何防御CSRF

    本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击). 说说CSRF 对CSRF来 ...

  10. CentOS系统中的passwd命令实用技巧小结

    这篇文章主要介绍了Linux系统中的passwd命令实用技巧小结,是Linux入门学习中的基础知识,需要的朋友可以参考下   先来回顾一下passwd命令的基本用法: Linux passwd命令用来 ...