【计算几何】【圆反演】hdu6097 Mindis
2024-08-27 02:35:19
给你一个中心在原点的圆,再给你俩在圆内且到原点距离相等的点P,Q,让你在圆上求一点D,最小化DP+DQ。
http://blog.csdn.net/qq_34845082/article/details/77099332
附:过反演中心的圆反演后变成一条和该圆正交的直线。
不过反演中心的圆反演后是一个与原圆关于反演中心位似的圆。
不过反演中心的直线反演后变成一个过反演中心且与其正交的圆。
#include<cstdio>
#include<cmath>
using namespace std;
const double EPS=0.0000000001;
struct Point{
double x,y;
Point(){}
Point(const double &x,const double &y){
this->x=x;
this->y=y;
}
double length(){
return sqrt(x*x+y*y);
}
void read(){
scanf("%lf%lf",&x,&y);
}
}p,q;
double R;
typedef Point Vector;
Vector unit(Vector v){
double l=v.length();
return Vector(v.x/l,v.y/l);
}
Point CalcMid(const Point &a,const Point &b){
return Point((a.x+b.x)*0.5,(a.y+b.y)*0.5);
}
double sqr(const double &x){
return x*x;
}
Vector operator - (const Point &a,const Point &b){
return Vector(a.x-b.x,a.y-b.y);
}
Vector operator * (const double &K,const Vector &v){
return Vector(K*v.x,K*v.y);
}
int T;
int main(){
scanf("%d",&T);
for(;T;--T){
scanf("%lf",&R);
p.read();
q.read();
if(fabs(p.x)<EPS && fabs(p.y)<EPS){
printf("%.10lf\n",2.0*R);
continue;
}
Point mp=CalcMid(p,q);
Point P=Point((p-mp).length(),sqrt(sqr(p.length())-sqr((p-mp).length())));
Point Pp=R*R/P.length()*unit(P);
if(Pp.y-R>EPS){
printf("%.10lf\n",P.length()/R*2.0*(Pp-Point(0.0,R)).length());
}
else{
printf("%.10lf\n",P.length()/R*2.0*Pp.x);
}
}
return 0;
}
最新文章
- 学习git与github的二三bug
- php : Warning: strftime(): It is not safe to rely on the system&#39;s timezone settings.
- 表单验证插件 - formValidator
- DOM扩展之Selectors API
- winform 开发之Control.InvokeRequired
- delphi 默认字体修改
- 仿新浪微博短网址PHP实现方案
- Sass与Compress实战:第一章
- inux的进程-进程的概念和fork创建进程
- Python字符串拼接的6种方法(转)
- SAS对数据变量的处理
- 【Python026--字典内键方法】
- JavaScript的几个概念简单理解(深入解释见You Don&#39;t know JavaScript这本书)
- [转]Java GC的原理
- ASP.NET Core WebApi 项目部署到 IIS 服务器的总结
- 字典学习(Dictionary Learning, KSVD)详解
- EditPlus 4.3.2560 中文版已经发布
- css布局:定宽,自适应
- IOS系统之蓝牙外接设备
- C#.NET常见问题(FAQ)-如何把资源嵌入到项目中
热门文章
- hdu 2795 Billboard(线段树+单点更新)
- Spark-2.3.2【SparkStreaming+SparkSQL-实时仪表盘应用】
- 上传漏洞新姿势(限Linux)
- cuda中的二分查找
- 工具===代替cmd的conemu设置
- python实战===国内很简单实用的一些开源的api以及开源项目
- 浅谈linux的死锁检测 【转】
- iptables 操作
- [hadoop][会装]hadoop ha模式安装
- C++——初识C++