<题目链接>

<转载于>

题目大意:

给一个光源点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 光源投影【平面几何】的更多相关文章

  1. POJ 1375 Intervals | 解析几何

    参考了这个博客 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath&g ...

  2. Three.js的光源投影

    Three.js的光源默认不会导致物体间的投影,打开投影需要执行以下几步: 打开渲染器的地图阴影: renderer.shadowMapEnabled = true; 启用光线的投影:light.ca ...

  3. poj 1089 Intervals

    http://poj.org/problem?id=1089 Intervals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  4. poj 1201 Intervals 解题报告

    Intervals Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Submit Statu ...

  5. POJ 3680 Intervals(费用流)

    Intervals Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5762   Accepted: 2288 Descrip ...

  6. POJ 1201 Intervals (差分约束系统)

    题意 在区间[0,50000]上有一些整点,并且满足n个约束条件:在区间[ui, vi]上至少有ci个整点,问区间[0, 50000]上至少要有几个整点. 思路 差分约束求最小值.把不等式都转换为&g ...

  7. poj 1201 Intervals(差分约束)

    做的第一道差分约束的题目,思考了一天,终于把差分约束弄懂了O(∩_∩)O哈哈~ 题意(略坑):三元组{ai,bi,ci},表示区间[ai,bi]上至少要有ci个数字相同,其实就是说,在区间[0,500 ...

  8. poj 1201 Intervals(差分约束)

    题目:http://poj.org/problem?id=1201 题意:给定n组数据,每组有ai,bi,ci,要求在区间[ai,bi]内至少找ci个数, 并使得找的数字组成的数组Z的长度最小. #i ...

  9. POJ 1201 Intervals(图论-差分约束)

    Intervals Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20779   Accepted: 7863 Descri ...

随机推荐

  1. mysql 原理 ~ 常规锁

    一 模式 RR模式二 mysql锁相关场景  1 有间隙的地方就可能有间隙锁,并非只有辅助索引的场景下才会存在gap lock,典型场景 id主键的范围查询  2 varchar的范围锁定原理和int ...

  2. centOS6.4 extundelete工具恢复rm -rf 删除的目录[转]

    原文:http://www.cnblogs.com/patf/p/3368765.html PS:补充下,我在fedora 19上运行的时候遇到的一个问题: 1 [root@localhost ext ...

  3. 集群下Dubbo负载均衡配置

    在集群负载均衡时,Dubbo提供了4种均衡策略,默认为Random(随机调用) 负载均衡策略: 1).Random LoadBalance(随机,按照权重的设置随机概率) 2).RoundRobin  ...

  4. python 退出程序的方式

    python程序退出方式[sys.exit() os._exit() os.kill() os.popen(...)] 知乎说明 http://www.zhihu.com/question/21187 ...

  5. freeRTOS中文实用教程4--资源管理互斥

    1.前言 访问一个被多任务共享,或是被任务与中断共享的资源时,需要采用”互斥”技术以保证数据在任何时候都保持一致性.这样做的目的是要确保任务从开始访问资源就具有排它性,直至这个资源又恢复到完整状态 F ...

  6. STM32F103X datasheet学习笔记---RCC(reset and clock control)

    1.前言 本文主要记录stm32 关于reset 和 clock部分 datasheet的内容. 2.reset 有三种类型的reset:system reset, power reset, back ...

  7. [转]SPI通信原理简介

    [转自]http://www.cnblogs.com/deng-tao/p/6004280.html 1.前言 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 ...

  8. C语言函数调用栈(二)

    5 函数调用约定 创建一个栈帧的最重要步骤是主调函数如何向栈中传递函数参数.主调函数必须精确存储这些参数,以便被调函数能够访问到它们.函数通过选择特定的调用约定,来表明其希望以特定方式接收参数.此外, ...

  9. Linux内核驱动--硬件访问I/O【原创】

    寄存器与内存 寄存器与内存的区别在哪里呢? 寄存器和RAM的主要不同在于寄存器操作有副作用(side effect或边际效果): 读取某个地址时可能导致该地址内容发生变化,比如很多设备的中断状态寄存器 ...

  10. phantomjs 解码url

    以下为部分代码: var htmlnodeInfo=(allADUrlElements.snapshotItem(i).getAttribute("href").match(/\* ...