poj 2074 Line of Sight 计算几何
/**
大意:给定一个建筑--水平放置,给定n个障碍物, 给定一条街道,从街道上能看到整个建筑的最长的连续的区域
思路: 分别确定每一个障碍物所确立的盲区,即----建筑物的终点与障碍物的起点的连线,建筑物的起点与障碍物的终点的连线。。这段区域即为盲区,,,有多个盲区,需要去重。。
学习之处: 1、障碍物在输入时去重,非常巧妙
2、 盲区的去重。与重组,。。巧妙。。
3、 寻找最大连续区域,,
**/
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const double eps = 1e-;
double max(double a,double b){
return a>b?a:b;
} struct point{
double x,y;
}; struct segment{
point s,e;
}; struct line{
double a,b,c;
}; struct data{
double l,r;
}a[]; line getline(point p1,point p2){
line tmp;
tmp.a = p1.y-p2.y;
tmp.b = p2.x-p1.x;
tmp.c = p1.x*p2.y-p2.x*p1.y;
return tmp;
} double getInterx(line l1,line l2){
return (l1.b*l2.c-l2.b*l1.c)/(l1.a*l2.b-l2.a*l1.b);
} bool cmp(data a,data b){
return a.l<b.l;
} int main()
{
int n,i,j;
double x1,x2,y;
segment hou,pro,obs[];
while(cin>>x1>>x2>>y){
if(x1==&&x2==&&y==)
break;
hou.s.x = x1,hou.s.y = y;
hou.e.x = x2,hou.e.y = y;
cin>>x1>>x2>>y;
pro.s.x = x1,pro.s.y = y;
pro.e.x = x2,pro.e.y = y;
cin>>n;
for(i=;i<n;i++){
cin>>x1>>x2>>y;
obs[i].s.x = x1,obs[i].s.y = y;
obs[i].e.x = x2,obs[i].e.y =y;
if(y>hou.s.y||y<pro.s.y){
n--;
i--;
}
}
line l_pro = getline(pro.s,pro.e);
for(i=j=;i<n;i++,j++){
line l1,l2;
l1 = getline(hou.s,obs[i].e);
l2 = getline(hou.e,obs[i].s);
a[j].r = getInterx(l_pro,l1);
a[j].l = getInterx(l_pro,l2);
if(a[j].r<pro.s.x||a[j].l>pro.e.x){
j--;
continue;
}
if(a[j].l<pro.s.x) //对于盲区超出街道的区域。
a[j].l = pro.s.x;
if(a[j].r>pro.e.x)
a[j].r = pro.e.x;
}
n = j;
if(n==){ //若没有障碍物在建筑物与街道之间,,则输出整个街道的长度
printf("%.2lf\n",pro.e.x-pro.s.x);
continue;
}
sort(a,a+n,cmp);
double l[],r[];
l[] = a[].l,r[] = a[].r;
for(j=,i=;i<n;i++){ //盲区的重组与去重
if(r[j]<a[i].l){
j++;
l[j] = a[i].l;
r[j] = a[i].r;
}else
r[j] = max(r[j],a[i].r);
}
double ans = max(l[]-pro.s.x,pro.e.x-r[j]); //寻找最大值。
for(i=;i<j;i++){
ans = max(ans,l[i+]-r[i]);
}
if(ans<eps)
printf("No View\n");
else
printf("%.2lf\n",ans);
}
return ;
}
poj 2074 Line of Sight 计算几何的更多相关文章
- Poj 2074 Line of Sight
地址:http://poj.org/problem?id=2074 题目: Line of Sight Time Limit: 1000MS Memory Limit: 30000K Total ...
- 简单几何(直线求交点) POJ 2074 Line of Sight
题目传送门 题意:从一条马路(线段)看对面的房子(线段),问连续的能看到房子全部的最长区间 分析:自己的思路WA了:先对障碍物根据坐标排序,然后在相邻的障碍物的间隔找到区间,这样还要判断是否被其他障碍 ...
- [poj] 2074 Line of Sight || 直线相交求交点
原题 给出一个房子(线段)的端点坐标,和一条路的两端坐标,给出一些障碍物(线段)的两端坐标.问在路上能看到完整房子的最大连续长度是多长. 将障碍物按左端点坐标排序,然后用房子的右端与障碍物的左端连线, ...
- unity下的Line of Sight(LOS)的绘制
先说说什么是Linf of Sight.在很多RTS游戏中,单位与单位之间的视野关系经常会受到障碍物遮挡.Line of Sight指的就是两个物体之间是否没有障碍物遮挡. 比如在dota中,玩家的视 ...
- 【转】Using Raycasts and Dynamically Generated Geometry to Create a Line of Sight on Unity3D
http://www.linkedin.com/pulse/using-raycasts-dynamically-generated-geometry-create-line-thomas José ...
- 【转】unity下的Line of Sight(LOS)的绘制
http://www.cnblogs.com/yangrouchuan/p/6366629.html 先说说什么是Linf of Sight.在很多RTS游戏中,单位与单位之间的视野关系经常会受到障碍 ...
- 2018.07.04 POJ 1654 Area(简单计算几何)
Area Time Limit: 1000MS Memory Limit: 10000K Description You are going to compute the area of a spec ...
- POJ2074:Line of Sight——题解
http://poj.org/problem?id=2074 题目大意:(下面的线段都与x轴平行)给两条线段,一个点在其中一条线段看另一条线段,但是中间有很多线段阻挡视线.求在线段上最大连续区间使得在 ...
- POJ 1066 Treasure Hunt(计算几何)
题意:给出一个100*100的正方形区域,通过若干连接区域边界的线段将正方形区域分割为多个不规则多边形小区域,然后给出宝藏位置,要求从区域外部开辟到宝藏所在位置的一条路径,使得开辟路径所需要打通的墙壁 ...
随机推荐
- Pie(求最小身高差,dp)
Pie Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- How to Type(dp)
How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3468 Treasure Hunting(BFS+网络流之最大流)
题目地址:HDU 3468 这道题的关键在于能想到用网络流.然后还要想到用bfs来标记最短路中的点. 首先标记方法是,对每个集合点跑一次bfs,记录全部点到该点的最短距离.然后对于随意一对起始点来说, ...
- Spring——jar包详解
org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spring 2.5.6的时候需要a ...
- ASP.NET listBbox控件用法
ListBox基本功能使用方法 2011-06-09 13:23:16| 分类: .NET/C# | 标签:listbox基本功能使用方法 |举报 |字号大中小 订阅 ListBox基 ...
- 设计模式- 主动对象(Active Object)
译者注:1.对象分为主动对象和被动对象,主动对象内部包含一个线程,可以自动完成动作或改变状态,而一般的被动对象只能通过被其他对象调用才有所作为.在多线程程序中,经常把一个线程封装到主动对象里面.2.在 ...
- 脚本化css
html文档的视觉显示包含很多变量:字体.颜色.间距等.css标准列举了这些变量.我们称之为样式属性.css定义了这些属性以指定字体.颜色.外边距.边框.背景.图片.文本对齐方式.元素尺寸和元素位置. ...
- pl sql项目演练--B2C商城项目
项目学习视频下载地址:点击下载 1.注册会员及找回密码模块 }该模块主要功能有注册会员和找回密码 }注册会员:所需信息主要有:登录号.密码.真实姓名.性别.密码问题.密码答案.Email.地址.电 ...
- 使用反射类、Class类获取指定的构造器并实例化对象
package com.test; public class Car { private String brand; private String color; private int maxSpee ...
- SecureCRT, SecureFX连接Linux时中文乱码解决办法
SecureCRT可以在GUI界面设置,但SecureFX没有设置界面.不过可以直接在配置文件中修改. 1. 找到配置文件夹(选项--全局选项,常规下的配置文件夹),默认是:C:\Documents ...