POJ1039+几何+直线于线段相交
注意:
不碰任何顶点-----(上下移动)>碰一个顶点-----(绕此顶点旋转)>碰两个顶点-----(绕前后两个顶点旋转)>碰上下各一个顶点
其中:判断i,j是否被某壁阻挡,可通过判断是否与垂直线段相交判断!!!!!!!!!!
1 /* 2 几何+直线相交+求交点 3 */ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #include<algorithm> 8 using namespace std; 9 const int maxn = 24; 10 const double inf= 99999999.0; 11 const double eps = 1e-8; 12 struct Point{ 13 double x,y; 14 }up[ maxn ],down[ maxn ]; 15 int sig( double d ){ 16 if( d>eps ) return 1; 17 if( d<-eps ) return -1; 18 return 0; 19 } 20 double xmult( Point a,Point b,Point c ){ 21 return ( b.x-a.x )*( c.y-a.y )-( b.y-a.y )*( c.x-a.x ); 22 } 23 bool check( Point a,Point b,Point c,Point d ){ 24 return (( sig(xmult(a,b,c)) )*( sig(xmult(a,b,d)) )<=0); 25 } 26 double Intersection( Point a,Point b,Point c,Point d ){ 27 double s1 = xmult( a,b,c ); 28 double s2 = xmult( a,b,d ); 29 int t1,t2; 30 t1 = sig( s1 ),t2 = sig( s2 ); 31 if( t1*t2<0 ){ 32 return ( c.x*s2-d.x*s1 )/(s2-s1);//return x 坐标 33 //(c.y*s2-d.y*s1)/(s2-s1) 34 } 35 if( t1*t2==0 ){ 36 if( t1==0 ) return c.x; 37 if( t2==0 ) return d.x; 38 } 39 return -inf; 40 } 41 int main(){ 42 int n; 43 while( scanf("%d",&n)==1,n ){ 44 for( int i=1;i<=n;i++ ){ 45 scanf("%lf%lf",&up[ i ].x,&up[ i ].y); 46 down[ i ].x = up[ i ].x; 47 down[ i ].y = up[ i ].y-1.0; 48 } 49 double ans = -inf; 50 bool flag = false;//是否能贯通两端 51 for( int i=1;i<=n;i++ ){ 52 for( int j=1;j<=n;j++ ){ 53 if( i!=j ){ 54 int k; 55 for( k=1;k<=n;k++ ){ 56 if( check( up[i],down[j],up[k],down[k] )==true ){}//与垂直的线段相交true 57 else break; 58 } 59 if( k>n ){ 60 flag = true; 61 break; 62 } 63 else if( k>max(i,j) ){ 64 double pos; 65 pos = Intersection( up[i],down[j],up[k],up[k-1] ); 66 if( pos>ans ) ans = pos; 67 pos = Intersection( up[i],down[j],down[k],down[k-1] ); 68 if( pos>ans ) ans = pos; 69 //因为不知道ij是和上管壁相交还是下管壁相交 70 } 71 } 72 } 73 if( flag==true ) break; 74 } 75 if( flag == true ) printf("Through all the pipe.\n"); 76 else printf("%.2lf\n",ans); 77 } 78 return 0; 79 }
转载于:https://www.cnblogs.com/xxx0624/archive/2013/03/28/2987373.html
POJ1039+几何+直线于线段相交相关推荐
- 【POJ - 3304 】Segments(计算几何,思想转化,直线和线段相交)
题干: Given n segments in the two dimensional space, write a program, which determines if there exists ...
- 两直线平行交叉相乘_计算几何算法5. 直线、线段和平面相交(2D和3D)
直线和线段相交 平面相交 直线-平面相交 两平面相交 三个平面相交 实现 intersect2D_2Segments() inSegment() intersect3D_SegmentPlane() ...
- 【POJ - 1556】The Doors (计算几何,线段相交)
题干: You are to find the length of the shortest path through a chamber containing obstructing walls. ...
- 判断直线与线段 是否相交 + 加入误差 故需要判断重点 poj 3304 Segments
题目来源:http://poj.org/problem?id=3304 分析: 题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出 ...
- 简单几何(线段相交+最短路) POJ 1556 The Doors
题目传送门 题意:从(0, 5)走到(10, 5),中间有一些门,走的路是直线,问最短的距离 分析:关键是建图,可以保存所有的点,两点连通的条件是线段和中间的线段都不相交,建立有向图,然后用Dijks ...
- Segments POJ 3304 直线与线段是否相交
题目大意:给出n条线段,问是否存在一条直线,使得n条线段在直线上的投影有至少一个公共点. 题目思路:如果假设成立,那么作该直线的垂线l,该垂线l与所有线段相交,且交点可为线段中的某两个交点 证明:若有 ...
- 几何常用算法与判断线段相交【转】
下面这个函数在我写的计算几何库函数里面有,那个库可以在http://algorithm.126.com/的资源中心 - 代码角 找到. 算法简单说明: 首先判断以两条线段为对角线的矩形是否 ...
- 直线或线段与mesh网格相交的计算
引言 在采样二指夹爪与mesh网格的抓取点时使用的点接触模型,抽象二指夹爪为一个线段,那么寻找夹爪与物体的接触点就抽象为直线与mesh网格的交点问题,而在mesh中物体表面是以空间三角形保存的,在进一 ...
- poj3304(线段相交问题)
题意:是否存在这样一条直线,使这条直线和所有的线段相交. #include<iostream> #include<algorithm> #include<cstring& ...
- 判断线段相交(hdu1558 Segment set 线段相交+并查集)
先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...
最新文章
- 了解生成对抗网络(GAN)
- Struts ActionForm简单理解
- oracle存储过程无效字符_Oracle存储过程基础+ 错误代码
- kingbase自带的驱动在哪_为什么别人家的广告语都能自带BUG?
- golang 用range 创建指针数组
- 为什么都瞧不起QQ邮箱?
- 【clickhouse】mac 10.15.7使用docker安装clickhouse
- Toon Boom Harmony 12 for Mac(二维动画设计工具)
- 16qam matlab 误码率,16QAM理论误码率与实际误码率MATLAB仿真程序
- 航测和倾斜摄影处理软件汇总
- 开关三极管的导通和截止条件
- 【刷题】LOJ 6008 「网络流 24 题」餐巾计划
- C++ Reflection
- 传奇地图时间限制脚本_地图时间限制脚本
- Oracle错误08s01,Java7 sqljdbc4 – getConnection()上的SQL错误08S01
- 近期业务大量突增微服务性能优化总结-2.开发日志输出异常堆栈的过滤插件
- synaptics安装
- 【VPP】 VPP CLI 命令
- 在 MaCA 根目录运行所有 py 文件
- Android 友盟推送收不到
热门文章
- Structured Streaming 入门案例之WordCount
- Zephyr移植到NXP MIMXRT1060_EVK-RT1061 CVL5A过程
- >>’ should be ‘> >’ within a nested template argument list
- 【吴恩达机器学习】学习笔记——4多元线性回归
- Clouder专项技能认证课程:网站建设——部署与发布
- mysql优化概述2
- python爬虫问题:error: command 'gcc' failed with exit status 1
- 如何使用 Java8 实现观察者模式?(上)
- 【HDU 4925】BUPT 2015 newbie practice #2 div2-C-HDU 4925 Apple Tree
- C# App.config 详解