题目:http://acm.hdu.edu.cn/showproblem.php?pid=4454

题意:给一个点,一个圆和一个矩形,矩形与圆没有重叠部分,求从该点出发经过圆上一点再到矩形边上一点的距离和的最小值。

分析:在区间[0,2*PI]内三分角度即可。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <iomanip>
#include <math.h>
using namespace std;
const double eps = 1e-9;
const double PI = acos(-1.0);
struct Point
{
double x,y;
};
struct Line
{
Point a,b;
};
double dist(Point A,Point B)
{
return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
double cross(Point A,Point B,Point C)
{
return (B.x-A.x)*(C.y-A.y)-(B.y-A.y)*(C.x-A.x);
}
double distToLine(Point p,Line s)
{
Point t = p;
t.x += s.a.y - s.b.y;
t.y += s.b.x - s.a.x;
if(cross(s.a,t,p)*cross(s.b,t,p) > eps)
return dist(p,s.a) < dist(p,s.b) ? dist(p,s.a) : dist(p,s.b);
return fabs(cross(p,s.a,s.b))/dist(s.a,s.b);
}
Point O,cir,A,B;
Line s[4];
Point p[4];
double r;
void Import()
{
cin>>cir.x>>cir.y>>r;
cin>>A.x>>A.y>>B.x>>B.y;
if(A.y < B.y) swap(A,B);
p[0].x = A.x;
p[0].y = B.y;
p[1].x = B.x;
p[1].y = B.y;
p[2].x = B.x;
p[2].y = A.y;
p[3].x = A.x;
p[3].y = A.y;
s[0].a = p[0];
s[0].b = p[1];
s[1].a = p[1];
s[1].b = p[2];
s[2].a = p[2];
s[2].b = p[3];
s[3].a = p[3];
s[3].b = p[0];
}
double equ(double alpha)
{
Point tmp;
tmp.x = cir.x + r*cos(alpha);
tmp.y = cir.y + r*sin(alpha);
double d1 = dist(O,tmp);
double ans = 99999999;
for(int i=0;i<4;i++)
ans = min(ans,distToLine(tmp,s[i]));
return d1+ans;
}
double ternarySearch(double l,double r)
{
while(r-l>eps)
{
double ll=(2*l+r)/3;
double rr=(l+2*r)/3;
double ans1=equ(ll);
double ans2=equ(rr);
if(ans1 > ans2)
l=ll;
else
r=rr;
}
return l;
}
void Work()
{
Import();
cout<<fixed<<setprecision(2)<<equ(ternarySearch(0,2*PI))<<endl;
}
int main()
{
while(true)
{
cin>>O.x>>O.y;
if(fabs(O.x)<eps && fabs(O.y)<eps) break;
Work();
}
return 0;
}

HDU4454(几何+三分)相关推荐

  1. 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Experiment Class(几何+三分套三分)

    题目链接:点击查看 题目大意:在二维平面的第一象限中给出两条射线代表河流,再给出起点和终点,问从起点出发,至少经过两条河各一次后到达终点的最短路 题目分析:如果只有一条河的话就是初中数学的经典问题了, ...

  2. HDU-4454 Stealing a Cake 三分枚举

    题意:给定一个点,一个圆,以及一个矩形,现在问从一个点到一个圆再到一个矩形的最短距离为多少?到达一个目标可以只挨着或者穿过它. 解法:目前只知道从一个点到圆上按照[0,PI],[PI,2*PI]的两个 ...

  3. hdu4454 三分 求点到圆,然后在到矩形的最短路

    题意:       求点到圆,然后在到矩形的最短路. 思路:       把圆切成两半,然后对于每一半这个答案都是凸性的,最后输出两半中小的那个就行了,其中有一点,就是求点到矩形的距离,点到矩形的距离 ...

  4. uva 1463 - Largest Empty Circle on a Segment(二分+三分+几何)

    题目链接:uva 1463 - Largest Empty Circle on a Segment 二分半径,对于每一个半径,用三分求出线段到线段的最短距离,依据最短距离能够确定当前R下每条线段在[0 ...

  5. uniny 物体运动到一个点停止_隐藏的几何:各类随机物体中的深层联系

    在"SLE曲线"结构中,随机性增加 | 来源:Jason Miller 标准几何体能够用简单规则描述,比如通过y = ax + b定义每条直线,而且各要素之间的关系也相对明了:两点 ...

  6. LA 4986 hdu3756 Dome of Circus 三分答案

    题目地址:hdu3756 额,首先转化为平面上的问题. 然后三分答案,因为体积肯定是先曾后减的. 代码: #include<iostream> #include<cmath> ...

  7. 《玩不够的数学:算术与几何的妙趣》:第一章 平面上的几何艺术

    第一章 平面上的几何艺术 人们往往从悖论中获得思维的乐趣,而几何学的悖论就是不可能图形.如今我们已创造出数千种这样的二维图像,不断挑战我们的眼睛和思维.三角形.披萨饼.七巧板也蕴藏着无穷的变化和巧妙的 ...

  8. 欧式几何—功能游戏介绍

    欧式几何-功能游戏介绍 功能游戏简介: 功能游戏是指,以解决现实社会和行业问题为主要目的,同时具有跨界性.多元性和场景化三大特征,并在学习知识.激发创意.拓展教学.模拟管理.训练技能.调整行为.养成良 ...

  9. 观察:华为全面进军公有云,胜算几何?

    华为这次是真的拼了! 这是老孙连续三天参加华为全联接大会2017最大的感受,在这次大会上,从华为副董事长.轮值CEO郭平,到华为产品与解决方案总裁汪涛,再到华为企业BG总裁阎力大,无一不在大会上明确提 ...

最新文章

  1. 【转】解决 java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 问题
  2. 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
  3. 树网的核(codevs 1167)
  4. SAP UI5 框架画Button的入口
  5. 10 个实用的 GitHub 插件
  6. 元素上下左右居中的几种方法
  7. 【perl脚本】perl one line的几个有趣实例1
  8. idea背景颜色修改
  9. dotnet C# 全局 Windows 鼠标钩子
  10. CPK的概念及其算法
  11. 树莓派CM4_Tiny(双HDMI)扩展板运行Openwrt演示(有线以太网)
  12. qua数据统计缺失问题之终结
  13. c语言srand函数用法,srand
  14. GitHub下载神器,被下架后又复活
  15. gensim官方文档实践笔记
  16. Tensorflow入门——自制数据集:将未经处理的图片制成npy格式的数据集
  17. deepin系统怎么分区?deepin系统分区方法介绍
  18. 宽带和网线有什么区别?
  19. 广度优先搜索与深度优先搜索
  20. Calendar类常用方法 日期间的转换 set方法有巨坑

热门文章

  1. 数据采集提升性能篇-使用Mybatis的批量操作api导入数据
  2. MyBatis的修改数据操作
  3. 引导类、扩展类、系统类加载器的使用及演示
  4. log4j2 配置文件
  5. Request_获取请求行数据_方法介绍
  6. 全局变量-函数内部不允许修改局部变量的值
  7. Spring Boot整合Spring Data Redis-提取Redis的链接参数
  8. css box 等高布局,css实现等高布局有哪些方式
  9. c语言怎么让两个函数同时进行_Excel高级筛选怎么用同时满足多个条件进行筛选...
  10. 总线控制内部eep_CAN总线在新能源汽车中的通信网络设计及应用分析