POJ 1375 Intervals 光源投影【平面几何】
<题目链接>
<转载于>
题目大意:
给一个光源点s,给一些圆,源点和s相切会形成阴影,求每一段阴影在横轴上的区间。
解题分析:
这道其实不需要点与圆切线的板子来求解,完全可以根据角度和线段长度之间的关系计算。
解此题的方法就是,先单独对每一个圆研究,算出它们各自在横轴上的投影区间,然后,再求出这些区间的并,把每一段区间输出即可。
当然,我们应该要注意到,点与圆的位置关系不只有这一种情况,还一种情况是,圆的圆形没有超过垂线,但是圆的圆心X+R超过了垂线,但是,经过简单证明发现,其实这两种情况都可以用一个表达式来表示,所以下面的代码只用写一种形式。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAXN 503 struct Ln //投影的区间
{
double l, r;//区间的左右端点横坐标
bool operator<(const Ln &b)const
{
return l < b.l;
}
}lns[MAXN];
int N; //水管总数 int main()
{
while (~scanf("%d", &N) && N)
{
int Lx, Ly; //light 灯的坐标
scanf("%d%d", &Lx, &Ly); for (int p = ; p < N; p++) {
int Ox, Oy, r;
scanf("%d%d%d", &Ox, &Oy, &r);//input
double OL = sqrt(double(Ox - Lx)*(Ox - Lx) + (Oy - Ly)*(Oy - Ly));
double alpha = asin((Lx - Ox) / OL);//∠OLC
double beta = asin(r / OL);//∠OLA
lns[p].l = Lx - Ly * tan(alpha + beta);
lns[p].r = Lx - Ly * tan(alpha - beta);
} sort(lns, lns + N);
double L = lns[].l, R = lns[].r;//初始化第一个区间
for (int p = ; p < N; p++) {
if (lns[p].l > R) {
printf("%.2lf %.2lf\n", L, R);//output//输出上一个
L = lns[p].l, R = lns[p].r;//初始化下一个
}
else
R = max(lns[p].r, R); //由于会出现长区间包含短区间的情况 因而需要比较大小
}
printf("%.2lf %.2lf\n\n", L, R); //output//输出最后一个大区间,这里不要忘记
}
return ;
}
2018-08-01
POJ 1375 Intervals 光源投影【平面几何】的更多相关文章
- POJ 1375 Intervals | 解析几何
参考了这个博客 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath&g ...
- Three.js的光源投影
Three.js的光源默认不会导致物体间的投影,打开投影需要执行以下几步: 打开渲染器的地图阴影: renderer.shadowMapEnabled = true; 启用光线的投影:light.ca ...
- poj 1089 Intervals
http://poj.org/problem?id=1089 Intervals Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- poj 1201 Intervals 解题报告
Intervals Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu Submit Statu ...
- POJ 3680 Intervals(费用流)
Intervals Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5762 Accepted: 2288 Descrip ...
- POJ 1201 Intervals (差分约束系统)
题意 在区间[0,50000]上有一些整点,并且满足n个约束条件:在区间[ui, vi]上至少有ci个整点,问区间[0, 50000]上至少要有几个整点. 思路 差分约束求最小值.把不等式都转换为&g ...
- poj 1201 Intervals(差分约束)
做的第一道差分约束的题目,思考了一天,终于把差分约束弄懂了O(∩_∩)O哈哈~ 题意(略坑):三元组{ai,bi,ci},表示区间[ai,bi]上至少要有ci个数字相同,其实就是说,在区间[0,500 ...
- poj 1201 Intervals(差分约束)
题目:http://poj.org/problem?id=1201 题意:给定n组数据,每组有ai,bi,ci,要求在区间[ai,bi]内至少找ci个数, 并使得找的数字组成的数组Z的长度最小. #i ...
- POJ 1201 Intervals(图论-差分约束)
Intervals Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20779 Accepted: 7863 Descri ...
随机推荐
- luogu P3978 [TJOI2015]概率论
看着就是要打表找规律 使用以下代码 for(int i=3;i<=20;i++) { int a1=0,a2=0; for(int j=1;j<i;j++) { for(int k=0;k ...
- [ZJOI2012]波浪弱化版(带技巧的DP)
题面 \(solution:\) 这道确实挺难的,情况特别多,而且考场上都没想到如何设置状态.感觉怎么设状态不能很好的表示当前情况并转移,考后发现是对全排列的构造方式不熟而导致的,而这一题的状态也是根 ...
- JQuery 的Bind()事件
刚开始我们先看一下它的定义: .bind( eventType [, eventData], handler(eventObject)) .Bind()方法的主要功能是在向它绑定的对象上面提供一些事件 ...
- AJAX请求 $.ajaxSetup方法的使用:设置AJAX请求的默认参数选项,当程序中需要发起多个AJAX请求时,则不用再为每一个请求配置请求的参数
定义和用法ajaxSetup() 方法为将来的 AJAX 请求设置默认值.语法$.ajaxSetup({name:value, name:value, ... }) 该参数为带有一个或多个名称/值对的 ...
- 攻打医院服务器的SamSam勒索木马分析
攻打医院服务器的SamSam勒索木马分析 近日一款名为SamSam的勒索木马在国外爆发.该木马利用医院系统的服务器漏洞实施入侵,再进行加密勒索钱财.由于医院网络信息安全水平普遍薄弱,SamSam成功感 ...
- shiro自定义realm认证(五)
上一节介绍了realm的作用: realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null.token就相当于是对用户输入 ...
- ES系列十、ES常用查询API
1.term查询 { "query": { "term": { "title": "crime" } } } 1.1.指 ...
- redhat换用centos源
解除原有源rpm -aq|grep yum|xargs rpm -e --nodepsrpm -aq|grep python-iniparse|xargs rpm -e --nodeps rpm -q ...
- Win10 + VS2017 15.5.6 环境下解决 Python 3.6 环境无法刷新DB的问题
作为宇宙第一IDE,VS2017对Python的支持还算可以,虽然和PyCharm等Python专用IDE相比还有些差距,但是经过后续的更新升级,我相信VS2017将越来越完善.由于本人一直都是使用V ...
- saltStack的event接口通过mysql数据库接收SaltStack批量管理日志
event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统.每个event都有一个标签.事件标签允许快速制定过滤事件.除了标签 ...