POJ 1127 /// 判断线段与线段是否相交
题目大意:
给定n条线段
接下来n行是端点信息
接下来询问 a b 是否相交
若a与c相交 b与c相交 ,那么a与b就是相交的
先判断任两条线段是否相交 再用folyd
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
const double eps = 1e-; double add(double a,double b) {
if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
return a+b;
} // 考虑误差
struct P {
double x,y;
P(){};
P(double _x,double _y):x(_x),y(_y){}
P operator -(P p) {
return P(add(x,-p.x),add(y,-p.y)); };
P operator +(P p) {
return P(add(x,p.x),add(y,p.y)); };
P operator *(double d) {
return P(x*d,y*d); };
double dot(P p) {
return add(x*p.x,y*p.y); };
double det(P p) {
return add(x*p.y,-y*p.x); };
};
// c在直线ab上 外积==0,c在ab两点之间 内积<=0
bool onSeg(P a,P b,P c)
{
return (a-c).det(b-c)== && (a-c).dot(b-c)<=;
} // 求两直线ab与cd交点
/*
设直线ab上点为 a+(b-a)t,t为变量
交点需满足在直线cd上 则(d-c)*(a+t(b-a)-c)=0(外积)
分解为加减式子 将t放在等号左边 其他放在右边
化简推导得t=(d-c)*(c-a)/(d-c)*(b-a)
则交点为a+(b-a)*((d-c)*(c-a)/(d-c)*(b-a))
*/
P ins(P a,P b,P c,P d)
{
return a+(b-a)*((d-c).det(c-a)/(d-c).det(b-a));
} bool insSS(P a,P b,P c,P d)
{
if((a-b).det(c-d)==) //平行
return onSeg(a,b,c) || onSeg(a,b,d)
|| onSeg(c,d,a) || onSeg(c,d,b);
else {
P t=ins(a,b,c,d);
return onSeg(a,b,t) && onSeg(c,d,t);
}
} int main()
{
int n,x,y;
bool G[][];
P p[],q[];
while(~scanf("%d",&n)) {
if(n==) break;
for(int i=;i<n;i++)
scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&q[i].x,&q[i].y); memset(G,,sizeof(G));
for(int i=;i<n;i++) {
G[i][i]=;
for(int j=;j<i;j++)
G[i][j]=G[j][i]=insSS(p[i],q[i],p[j],q[j]);
} for(int i=;i<n;i++)
for(int j=;j<n;j++)
for(int k=;k<n;k++)
G[j][k] |= G[j][i]&&G[i][k]; while(~scanf("%d%d",&x,&y)) {
if(x+y==) break;
if(G[--x][--y]) printf("CONNECTED\n");
else printf("NOT CONNECTED\n");
}
} return ;
}
POJ 1127 /// 判断线段与线段是否相交的更多相关文章
- Segments - POJ 3304 (判断直线与线段是否相交)
题目大意:给出一些线段,然后判断这些线段的投影是否有可能存在一个公共点. 分析:如果这些线段的投影存在一个公共点,那么过这个公共点作垂线一定与所有的直线都想交,于是题目转化成是否存在一个直线可以经 ...
- POJ 2074 /// 判断直线与线段相交 视野盲区
题目大意: 将所有物体抽象成一段横向的线段 给定房子的位置和人行道的位置 接下来给定n个障碍物的位置 位置信息为(x1,x2,y) 即x1-x2的线段 y相同因为是横向的 求最长的能看到整个房子的一段 ...
- poj 1127 -- Jack Straws(计算几何判断两线段相交 + 并查集)
Jack Straws In the game of Jack Straws, a number of plastic or wooden "straws" are dumped ...
- POJ 3304 Segments (判断直线与线段相交)
题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...
- POJ 3304 Segments(判断直线与线段是否相交)
题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...
- 判断直线与线段相交 POJ 3304 Segments
题意:在二维平面中,给定一些线段,然后判断在某直线上的投影是否有公共点. 转化,既然是投影,那么就是求是否存在一条直线L和所有的线段都相交. 证明: 下面给出具体的分析:先考虑一个特殊的情况,即n=1 ...
- poj 2653 线段与线段相交
Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 11884 Accepted: 4499 D ...
- poj 1269 线段与线段相交
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13605 Accepted: 60 ...
- POJ 1039 Pipe【经典线段与直线相交】
链接: http://poj.org/problem?id=1039 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
随机推荐
- bootstrapValidator--表单校验
关于表单校验 要依次引入 <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css"& ...
- CSS——浮动及应用&清除浮动
浮动(float) 1.普通流(normal flow) 这个单词很多人翻译为 文档流 , 字面翻译 普通流 或者标准流都可以. 前面我们说过,网页布局的核心,就是用CSS来摆放盒子位置.如何把盒子摆 ...
- JavaWeb学习篇之----容器Request详解
前篇说到了Response容器对象,这篇我们就来看一下Request容器对象,之前也说过了,这个两个容器对象是相对应的,每次用户请求服务器的时候web容器就会给创建这对容器对象,他们是共存亡的,当然R ...
- NX-二次开发删除对象UF_OBJ_delete_object
NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_obj.h> UF_initialize ...
- NX二次开发-获取按钮的ID UF_MB_ask_button_id
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- C++ string的大小写转换【转载】
转载自https://www.cnblogs.com/balingybj/p/4678850.html 将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并 没有提供这 ...
- hexo next主题深度优化(三),引入require.js,适配pjax。
文章目录 require.js的好处, hexo next中加入require.js 新建一个main.js作为所有js的入口 pjax的require.js实现 关于require js适配过程中报 ...
- js实现下拉框
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- css玩转文字
<div style=" direction:rtl; unicode-bidi:bidi-override">文字被反转过来了</div> 执行后的效果为 ...
- SVG动画制作工具 , 从此抛弃臃肿的gif
VG简介 只要是程序员的你,你不得不知道svg图片,它可以无限任意放大拉伸都不会损失画质,就像系统字体一样可以无限矢量放大,svg更高级是可以用来制作矢量动画,现在各大浏览器和系统基本对svg已经支持 ...