poj3304 Segments【计算几何】
最近开始刷计算几何了 公式好多完全不会
数学不行 几何不行 记忆力不行 当机
查的题解 就当复习吧 这套专题拿来熟悉一下计算几何模板
#include <iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
const double eps = 1e-8;
int sgn(double x)//处理精度
{
if(fabs(x) < eps) return 0;
if(x < 0) return -1;
return 1;
}
struct point{
double x, y;
point(){}
point(double xx, double yy):x(xx), y(yy){}
point operator -(const point &a) const{
return point(x - a.x, y - a.y);
}
double operator ^(const point &a) const{
return x * a.y - y * a.x;
}
double operator *(const point &a) const{
return x * a.x + y * a.y;
}
};
struct line{
point s, e;
line(){}
line(point ss, point ee):s(ss), e(ee){}
};
double xmult(point p0, point p1, point p2)//判断p0是否在p1-p2直线上
{
return (p1 - p0) ^ (p2 - p0);
}
bool seg_line(line a, line b)
{
return sgn(xmult(b.s, a.s, a.e) * sgn(xmult(b.e, a.s, a.e))) <= 0;//线段b的两个端点在直线a的两端
}
double dist(point a, point b)
{
return sqrt((b - a) * (b - a));
}
const int maxn = 110;
line ll[maxn];
bool check(line a, int n)
{
if(sgn(dist(a.s, a.e))== 0) return false;
for(int i = 0; i < n; i++){
if(seg_line(a, ll[i]) == 0)
return false;
}
return true;
}
int main()
{
int n, t;
cin>>t;
while(t--){
cin>>n;
double x1, x2, y1, y2;
for(int i = 0; i < n; i++){
cin>>x1>>y1>>x2>>y2;
ll[i] = line(point(x1, y1), point(x2, y2));
}
int flag = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(check(line(ll[i].s, ll[j].s), n) || check(line(ll[i].s, ll[j].e), n)||
check(line(ll[i].e, ll[j].s), n) || check(line(ll[i].e, ll[j].e), n)){
flag = true;//找到了一条直线可以和所有的线段相交
break;
}
}
}
printf("%s\n", flag ? "Yes!" : "No!");
}
return 0;
}
poj3304 Segments【计算几何】的更多相关文章
- HDU 6697 Closest Pair of Segments (计算几何 暴力)
2019 杭电多校 10 1007 题目链接:HDU 6697 比赛链接:2019 Multi-University Training Contest 10 Problem Description T ...
- POJ3304 Segments 【线段直线相交】
题意: 给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!. 思路: 计算几何.这道题要思考到两点: 1:把问题转化为是否存在一条直线 ...
- POJ3304(KB13-C 计算几何)
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15335 Accepted: 4862 Descrip ...
- POJ3304:Segments (几何:求一条直线与已知线段都有交点)
Given n segments in the two dimensional space, write a program, which determines if there exists a l ...
- POJ 3304 Segments(计算几何)
意甲冠军:给出的一些段的.问:能否找到一条直线,通过所有的行 思维:假设一条直线的存在,所以必须有该过两点的线,然后列举两点,然后推断是否存在与所有的行的交点可以是 代码: #include < ...
- POJ3304 Segments
嘟嘟嘟 题面就不说了,网上都有. 刚开始理解成了只要有不孤立的线段就算合法,结果就不会了--然而题中要求是所有线段至少有一个交点. 其实想一想就知道,问题转化为了是否存在一条直线和所有线段都有交点. ...
- 【kuangbin专题】计算几何基础
1.poj2318 TOYS 传送:http://poj.org/problem?id=2318 题意:有m个点落在n+1个区域内.问落在每个区域的个数. 分析:二分查找落在哪个区域内.叉积判断点与线 ...
- poj分类解题报告索引
图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Jou ...
- 2018.07.04 POJ 3304 Segments(简单计算几何)
Segments Time Limit: 1000MS Memory Limit: 65536K Description Given n segments in the two dimensional ...
随机推荐
- python Thread对象的setDaemon(True)的作用。
1.如果主线程是永远都不会结束的,那设置一个线程为守护线程是没必要的,设不设置都一样. 2.什么时候需要设置为守护线程?如果希望子线程一直运行,可以把子线程的代码写在while True里面一直循环, ...
- 定时器Enable Disable控制
问题:定时器如何控制它一会可用一会不可用,根据某个业务需求,比如:一个控制台程序扫描表中某个条件的数据,处理数据,控制台分布式部署,当主机宕机后,从机扫描定时器需要可用,当主机复活后,从机的扫描定时器 ...
- 搭建项目Maven+springMVC+hibernate时,JUnit測试出现报ClassNotFoundException错误的解决
近期在搭建Maven+springMVC+hibernate项目,正常启动项目时一切正常.但JUNIT測试时出现报ClassNotFoundException错误,经过细致排查发现没有生成class文 ...
- 【高级算法】遗传算法解决3SAT问题(C++实现)
转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46910079 1 SAT问题描写叙述 命题逻辑中合取范式 (CNF) 的可满足性问 ...
- SpringMVC由浅入深day01_12参数绑定(12.1参数绑定过程_12.2默认支持的类型_12.3简单类型)
12 参数绑定 处理器适配器在执行Handler之前需要把http请求的key/value数据绑定到Handler方法形参数上. 注解适配器对RequestMapping标记的方法进行适配,对方法中的 ...
- python --help查询python相关命令
C:\Users\lenovo>python --help usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... O ...
- Unity透明Shader
Shader "Custom/Blocks" { Properties { _Color (,,,) _MainTex ("Albedo (RGB)", 2D) ...
- 用c语言如何在数字前自动补0
一: #include <stdio.h>int main(){ long a=3,b=4,c=15; printf("......."a,b,c);return 0; ...
- MVC的简单分页【转】
传值的方式是通过querystring. 本例子是把整需要的数据查出来再分页的,因为当时做的时候数据很少,只有几十条. 如果数据多的话,可以在存储过程里分页,只是要传页码和记录的条数过来. 控制器: ...
- codeforcess水题100道
之所以在codeforces上找这100道水题的原因是为了巩固我对最近学的编程语言的掌握程度. 找的方式在codeforces上的PROBLEMSET中过的题最多的那些题里面出现的最前面的10个题型, ...