Unstable

题目连接:

http://acm.hdu.edu.cn/showproblem.php?pid=5295

Description

Rasen had lost in labyrinth for 20 years. In a normal day, he found a bright screen. There were 4 points labeled by ‘A’ , ‘B’ , ‘C’ , ‘D’, and rasen could drag these point. And two points ‘E’ , ‘F’ moved. Rasen found that ‘E’ is the middle point of ‘A’ and ‘B’, and ‘F’ is the middle point of ‘C’ and ‘D’. Near the screen there was a marble slab.There were a list of the distance of AB , BC , CD , DA and EF. Rasen also found that the distance of these edge of the points in screen showed at the same time he drop the points. He wanted to know what will happen if the distances in screen are same with the number in slab.

Input

The first line of input contains only one integer T(<=50000), the number of test cases.

Each case contains five float number, indicating the distance of AB , BC , CD , DA , EF.(0<=distance<=10000)

Output

For each test, first print a line “Case #i:”(without quotes),with i implying the case number, then output the coordinates of A,B,C,D four points. Answer will be considered as correct if the length got from your output (the spj will use double to get the point, and the distance from two points will calculate in the way of sqrt((x1-x2)^2 +(y1-y2)^2) ) and the length given is less than 10-4.

(It guarantees that there exists a solution. If there are many solutions, output any one of them.)

Sample Input

1

1.000000 1.000000 1.000000 1.000000 1.000000

Sample Output

Case #1:

0.000000 0.000000

1.000000 0.000000

1.000000 1.000000

0.000000 1.000000

Hint

题意

平面上有四个点A,B,C,D

然后告诉你AB,BC,CD,DA长度,然后E是AB中点,F是CD中点,EF的长度你也知道。

现在你需要构造一组解,使得满足要求。

题解:

随便画个四边形,然后延长AF到A‘,使得A’F=AF,做AB的平行线DG,使得DG=AB。

然后连接A'C,A'B,A'G,CG

显然的发现三角形DFA全等于三角形FCA',三角形AFE相似于三角形ABA'

然后A‘就是以C点为圆心,AC为半径和B点为圆心,BA'为半径的圆相交的交点。

知道A’之后,G点可以由CA'+CB得到。

然后D点坐标就是以G为圆心,AB为半径,C为圆心,CD为半径的交点。

然后A点就瞎搞就好了。

然后就完了。

代码

#include<bits/stdc++.h>
using namespace std;
struct POINT
{
double x;
double y;
POINT(double a=0, double b=0) { x=a; y=b;} //constructor
};
void c2point(POINT p1,double r1,POINT p2,double r2,POINT &rp1,POINT &rp2)
{
if(fabs(p1.x-p2.x)<1e-6&&fabs(p1.y-p2.y)<1e-6&&fabs(r1-r2)<1e-6)
{
rp1.x=p1.x;
rp1.y=p1.y+r1;
rp2.x=p1.x;
rp2.y=p1.y-r1;
return;
}
double a,b,r;
a=p2.x-p1.x;
b=p2.y-p1.y;
r=(a*a+b*b+r1*r1-r2*r2)/2;
if(fabs(a)<1e-6&&fabs(b)>1e-6)
{
rp1.x=rp2.x=r/b;
double tmp = r1*r1-rp1.x*rp1.x;
if(tmp<0)tmp=0;
rp1.y=sqrt(tmp);
rp2.y=-rp1.y;
}
else if(fabs(a)>1e-6&&fabs(b)<1e-6)
{
rp1.x=rp2.x=r/a;
double tmp = r1*r1-rp1.x*rp2.x;
if(tmp<0)tmp=0;
rp1.y=sqrt(tmp);
rp2.y=-rp1.y;
}
else if(fabs(a)>1e-6&&fabs(b)>1e-6)
{
double delta;
delta=b*b*r*r-(a*a+b*b)*(r*r-r1*r1*a*a);
if(delta<0)delta=0;
rp1.y=(b*r+sqrt(delta))/(a*a+b*b);
rp2.y=(b*r-sqrt(delta))/(a*a+b*b);
rp1.x=(r-b*rp1.y)/a;
rp2.x=(r-b*rp2.y)/a;
} rp1.x+=p1.x;
rp1.y+=p1.y;
rp2.x+=p1.x;
rp2.y+=p1.y;
}
void solve(int Cas)
{
double ab,bc,cd,da,ef;
scanf("%lf %lf %lf %lf %lf",&ab,&bc,&cd,&da,&ef);
POINT A,B,C,D,E,F,G,A1;
C.x=0,C.y=0;
B.x=bc,B.y=0;
POINT tmp1,tmp2; c2point(C,da,B,2*ef,tmp1,tmp2); A1=tmp1;
G.x=A1.x+B.x,G.y=A1.y+B.y; c2point(C,cd,G,ab,tmp1,tmp2);
D=tmp1; A.x=D.x+C.x-A1.x;
A.y=D.y+C.y-A1.y; printf("Case #%d:\n",Cas);
printf("%.12f %.12f\n",A.x,A.y);
printf("%.12f %.12f\n",B.x,B.y);
printf("%.12f %.12f\n",C.x,C.y);
printf("%.12f %.12f\n",D.x,D.y);
}
int main()
{
int t;scanf("%d",&t);
for(int i=1;i<=t;i++)solve(i);
return 0;
}

HDU 5295 Unstable 计算几何的更多相关文章

  1. HDU 4998 Rotate (计算几何)

    HDU 4998 Rotate (计算几何) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4998 Description Noting is more ...

  2. hdu 4643 GSM 计算几何 - 点线关系

    /* hdu 4643 GSM 计算几何 - 点线关系 N个城市,任意两个城市之间都有沿他们之间直线的铁路 M个基站 问从城市A到城市B需要切换几次基站 当从基站a切换到基站b时,切换的地点就是ab的 ...

  3. HDU 1174 爆头(计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1174 解题报告:就是用到了三维向量的点积来求点到直线的距离,向量(x1,y1,z1)与(x2,y2,z ...

  4. hdu 1086(计算几何入门题——计算线段交点个数)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2 ...

  5. hdu 4613 Points<计算几何>

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4613 题意: 判断一个集合中的点能不能由另一个集合中的点,通过平移,旋转,放缩得到~ 思路:先求出集合中的 ...

  6. 2017多校第6场 HDU 6097 Mindis 计算几何,圆的反演

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6097 题意:有一个圆心在原点的圆,给定圆的半径,给定P.Q两点坐标(PO=QO,P.Q不在圆外),取圆 ...

  7. hdu 4643(计算几何)

    题意:容易理解 分析:切换的地点为两个基站所在直线的中垂线与两座城市所在直线的交点. 代码实现: #include <cstdio> #include <cmath> #inc ...

  8. hdu 4606 简单计算几何+floyd+最小路径覆盖

    思路:将所有的直线的两个端点和城市混在一起,将能直接到达的两个点连线,求一次floyd最短路径.二分枚举bag容量,然后按给的要先后占领的城市由前向后,把能到一步到达的建一条边.然后求一次最小路径覆盖 ...

  9. hdu 4063 Aircraft(计算几何+最短路)

    不说了...说多了都是泪...从昨天下午一直wa到现在,直到刚刚才让人帮我找到所谓的“bug”,其实也算不上bug... 这个题的思路就是:找出平面上的所有点:所有圆的交点以及所有圆的圆心.然后依次判 ...

随机推荐

  1. Django框架<一>

    Django框架 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Sess ...

  2. JNDI(Java Naming and Directory Interface,Java命名和目录接口)

    JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访 ...

  3. Mysql授权允许远程访问

    MySQL Community Edition(GPL) 在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户是没有远程访问的权 ...

  4. PlantUML——2.中文乱码及解决

    关于中文 参见: http://plantuml.sourceforge.net/unicode.html   问题描述 第一步:创建demo03.txt描述文档: @startuml Alice - ...

  5. openssh升级步骤

    1下载openssh最新版本 2 configure ./configure --prefix= /ssh先配置一下 再在本地安装. make &makeinstall 3 按照/ssh包含内 ...

  6. IDEA添加其他项目为库文件的方法

    IDEA添加其他项目为库文件的方法 2014年1月23日星期四 20:46 问题:如果我通过引用项目修改了被引用库项目的源代码,他没法自动编译,所以不会立即反应到引用项目. 在Eclipse中,很简单 ...

  7. json数据操作

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  8. 【hdoj_1715】大菲波数(大数+100000000进制)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1715 本题采用大数加法即可解决.采用100000000进制速度更快. C++代码如下: #include& ...

  9. 【PAT】1014. 福尔摩斯的约会 (20)

    1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...

  10. html 条件注释判断浏览器版本<!--[if lt IE 9]>

    <!--[if lte IE 8]><script>window.location.href='http://support.dmeng.net/upgrade-your-br ...