圆的反演+计算几何
来源:互联网 发布:装修报价预算软件 编辑:程序博客网 时间:2024/06/15 11:29
Mindis
题意:圆心 O 坐标(0, 0), 给定两点 P, Q(不在圆外),满足 PO = QO,要在圆上找一点 D,使得 PD + QD 取到最小值。数据范围:
思路:
根据圆的反演,构造一个相似三角形,可以转换问题。
如果求得的距离小于eps,说明近似于原点,距离为2*r;
然后就根据两个反演点的中点到原点的距离 和半径进行比较,小于等于有交点,大于没有交点。
因为反演点与原点构成一个等腰三角形,所以用中点的距离进行判断就行了。
关于图的反演,可以看看大神的分析:ACdreamers
如果是小于的情况,那么有交点,结果就是两个反演点的直线距离,再乘以相似比。
如果大于,说明没有交点,这种情况就应该在P,Q两个点的连线的中垂线上。
根据比例,求出在圆上的点D的坐标,已知两点坐标就能求出距离。
题解:http://blog.csdn.net/a7f650ebd327889c/article/details/77070942(这个有图会好理解点)
AC代码:
#include <iostream>#include <stdio.h>#include <math.h>#define eps 1e-8using namespace std;int main(){ int t; scanf("%d",&t); double r,x1,x2,y1,y2; while(t--) { scanf("%lf%lf%lf%lf%lf",&r,&x1,&y1,&x2,&y2); double d1=sqrt(x1*x1+y1*y1); if(d1<eps) { printf("%.7f\n",r*2); continue; } double k=r*r/(d1*d1); double x3,y3,x4,y4; x3=x1*k,y3=y1*k; x4=x2*k,y4=y2*k; double mx=(x3+x4)/2,my=(y3+y4)/2; double d=sqrt(mx*mx+my*my),ans; if(d<=r) { double dis=sqrt((x3-x4)*(x3-x4)+(y3-y4)*(y3-y4)); ans=dis*d1/r; } else { double kk=r/d; double mxx=mx*kk,myy=my*kk; ans=2*sqrt((mxx-x1)*(mxx-x1)+(myy-y1)*(myy-y1)); } printf("%.7f\n",ans); } return 0;}
阅读全文
0 0
- 圆的反演+计算几何
- HDU 6097 Mindis【计算几何+反演点】
- hdu 6158 The Designer 计算几何之圆反演 2017中国大学生程序设计竞赛
- hdu 4773 几何反演 线->圆
- 【计算几何】圆的面积并
- 基本的计算几何
- 计算几何的题目
- 计算几何的模板
- 计算几何的学习
- 学习笔记: 反演几何
- 计算圆的周长(入门题-计算几何)
- 圆的反演变换
- 圆的反演
- 圆的反演
- 圆的反演
- 圆的反演模版
- HDU 2017 多校联合训练赛6 1002 6097 Mindis 反演变换 计算几何
- 计算几何的常用算法
- C语言符号
- 一文弄懂神经网络中的反向传播法——BackPropagation
- deep compression
- 各种css形状 CSS实现圆角,三角,五角星,五边形,爱心,12角星,8角星,圆,椭圆,圆圈,八卦等等
- hdu1695 GCD(莫比乌斯反演)
- 圆的反演+计算几何
- 偏最小二乘回归分析实例plsregress命令
- 浅析Java中的final关键字
- (UVA
- Aggressive cows(最大化最小值问题)
- java编程思想笔记-并发之CountDownLatch
- java回调
- 51nod 1240 莫比乌斯函数
- P2094 运输