题目描述

Several days ago, a beast caught a beautiful princess and the princess was put in prison. To rescue the princess, a prince who wanted to marry the princess set out immediately. Yet, the beast set a maze. Only if the prince find out the maze’s exit can he save the princess.

Now, here comes the problem. The maze is a dimensional plane. The beast is smart, and he hidden the princess snugly. He marked two coordinates of an equilateral triangle in the maze. The two marked coordinates are A(x1,y1) and B(x2,y2). The third coordinate C(x3,y3) is the maze’s exit. If the prince can find out the exit, he can save the princess. After the prince comes into the maze, he finds out the A(x1,y1) and B(x2,y2), but he doesn’t know where the C(x3,y3) is. The prince need your help. Can you calculate the C(x3,y3) and tell him?

输入

The first line is an integer T(1 <= T <= 100) which is the number of test cases. T test cases follow. Each test case contains two coordinates A(x1,y1) and B(x2,y2), described by four floating-point numbers x1, y1, x2, y2 ( |x1|, |y1|, |x2|, |y2| <= 1000.0).
    Please notice that A(x1,y1) and B(x2,y2) and C(x3,y3) are in an anticlockwise direction from the equilateral triangle. And coordinates A(x1,y1) and B(x2,y2) are given by anticlockwise.

输出

    For each test case, you should output the coordinate of C(x3,y3), the result should be rounded to 2 decimal places in a line.

示例输入

4
-100.00 0.00 0.00 0.00
0.00 0.00 0.00 100.00
0.00 0.00 100.00 100.00
1.00 0.00 1.866 0.50

示例输出

(-50.00,86.60)
(-86.60,50.00)
(-36.60,136.60)
(1.00,1.00)

提示

 

来源

2013年山东省第四届ACM大学生程序设计竞赛
分两种:一种是A点B点的x坐标相同,二种:X坐标不相同。
#include<stdio.h>
#include<math.h>
int main()
{
double b[2],c[3],a,x[3],y[3],tx[2],ty[2],k,bb,edglen;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf%lf",&x[0],&y[0],&x[1],&y[1]);
if(x[0]==x[1])
{
edglen=sqrt(pow(x[0]-x[1],2.0)+pow(y[0]-y[1],2.0));
tx[0]=x[0]+sqrt(3.0)/2*edglen;
tx[1]=x[0]-sqrt(3.0)/2*edglen;
if(y[1]>y[0])
{
ty[0]=y[0]+edglen/2;
printf("(%.2lf,%.2lf)\n",tx[1],ty[0]);
}
else
{
ty[0]=y[1]+edglen/2;
printf("(%.2lf,%.2lf)\n",tx[0],ty[0]);
}
continue;
}
c[0]=(x[0]*x[0]-x[1]*x[1]+y[0]*y[0]-y[1]*y[1])/(2*x[0]-2*x[1]);
b[0]=-(y[0]-y[1])/(x[0]-x[1]);
a=b[0]*b[0]+1; b[1]=2*(c[0]*b[0]-x[1]*b[0]-y[1]);
c[1]=x[0]*x[0]-2*x[0]*x[1]+y[0]*y[0]-2*y[0]*y[1];
c[2]=c[0]*c[0]-2*c[0]*x[1]-c[1];
k=-b[0]; bb=y[0]-k*x[0];
ty[0]=(-b[1]+sqrt(b[1]*b[1]-4*a*c[2]))/(2*a);tx[0]=c[0]+b[0]*ty[0];
ty[1]=(-b[1]-sqrt(b[1]*b[1]-4*a*c[2]))/(2*a);tx[1]=c[0]+b[0]*ty[1];
if(x[0]<x[1])
{
if(ty[0]-k*tx[0]-bb>0)
{
x[2]=tx[0];y[2]=ty[0];
}
else
{
x[2]=tx[1];y[2]=ty[1];
}
}
else if(x[0]>x[1])
{
if(ty[0]-k*tx[0]-bb<0)
{
x[2]=tx[0];y[2]=ty[0];
}
else
{
x[2]=tx[1];y[2]=ty[1];
}
}
printf("(%.2lf,%.2lf)\n",x[2],y[2]);
} }

SDUTRescue The Princess(数学问题)的更多相关文章

  1. 山东省第四届acm.Rescue The Princess(数学推导)

    Rescue The Princess Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 412  Solved: 168 [Submit][Status ...

  2. 山东省第四届ACM程序设计竞赛A题:Rescue The Princess(数学+计算几何)

    Rescue The Princess Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 412  Solved: 168[Submit][Status][ ...

  3. 计算几何 2013年山东省赛 A Rescue The Princess

    题目传送门 /* 已知一向量为(x , y) 则将它旋转θ后的坐标为(x*cosθ- y * sinθ , y*cosθ + x * sinθ) 应用到本题,x变为(xb - xa), y变为(yb ...

  4. 数学思想:为何我们把 x²读作x平方

    要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...

  5. 速算1/Sqrt(x)背后的数学原理

    概述 平方根倒数速算法,是用于快速计算1/Sqrt(x)的值的一种算法,在这里x需取符合IEEE 754标准格式的32位正浮点数.让我们先来看这段代码: float Q_rsqrt( float nu ...

  6. MarkDown+LaTex 数学内容编辑样例收集

    $\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...

  7. 深度学习笔记——PCA原理与数学推倒详解

    PCA目的:这里举个例子,如果假设我有m个点,{x(1),...,x(m)},那么我要将它们存在我的内存中,或者要对着m个点进行一次机器学习,但是这m个点的维度太大了,如果要进行机器学习的话参数太多, ...

  8. Sql Server函数全解<二>数学函数

    阅读目录 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机函数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SI ...

  9. *HDU 2451 数学

    Simple Addition Expression Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

随机推荐

  1. 网站开发常用jQuery插件总结(二)弹出层插件Lightbox_me

    网站开发过程中,为了增加网站交互效果,我们有时需要在当前页面弹出诸如登陆.注册.设置等窗口.而这些窗口就是层,弹出的窗口就是弹出层.jQuery中弹出层插件很多,但有些在html5+css3浏览器下, ...

  2. swift官方文档中的函数闭包是怎么理解的?

    官方文档中的16页: numbers.map({ (number: Int) -> Int in let result = * number return result }) 不知道这个怎么用, ...

  3. 对于volatile的理解

    哎.要学的东西太多,时间太少.一周的工作下来要总结的东西太多,还处理不完,越积越多.大周末的好想出去玩啊.... 得嘞,废话止于此. 无聊时候乱看网页发现了volatile的一篇文章,以前曾经对vol ...

  4. Mac、Linux与Windows

    Mac本身是基于达尔文内核(Darwin内核),是苹果由UNIX改造的类UNIX,然后在这内核基础上搭建的图形界面 Linux确实是个好东西,你只需要一个键盘,一个显示器,一根网线,接入网络,便能做几 ...

  5. hdu 2012 素数判定 Miller_Rabbin

    素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. php使用domdocument读取xml文件

    使用domdocument读取xml文件需要用到以下几个方法和属性: 方法: 1:读取xml文件:load() 2:获取标签的对象数组:getElementByTagName() 3:对象数组的索引: ...

  7. DragSortListView学习总结

    Drag-sort-listview 是一个支持拖拽排序和左右滑动删除功能的自定义ListView,重写了 TouchInterceptor类来提供更加优美的拖拽动画效果. DSLV主要特性: 完美的 ...

  8. MySQL的备份与恢复

    Linux下的mysql的备份与恢复 备份: 比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump 命令格式如下: [root@linuxsir01 root]# ...

  9. Win8.1、Office2013一键激活工具

    Win8.1.Office2013一键激活工具 KMSpico V7.0 是一款激活Win8.Windows8.1和Office2013的工具,由国外网友heldigard基于KMSEmulator制 ...

  10. java 中的访问修饰符

    一. public:所有类都可以访问 protected:所有子类和同包下的类都可以访问 缺省:同包类都可以访问 private:类本身才可以访问 注意点:protected修饰类属性时,例如 pac ...