题目描述

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. Win8 +PHP+IIS配置

    1.安装IIS:控制面板-程序和功能-打开或关闭Windows功能 2.配置PHP环境 -添加ISAPI筛选: -添加脚本映射:

  2. sql 建立数据库,表格,索引,主键

    ---- 数据库: `message_db`-- -- --------------------------------------------------------create database ...

  3. (转)ASP.NET-关于Container dataitem 与 eval方法介绍

    Container是一个数据容器,代表集合类或者dataview中的一行,而Container.dataitem代表该行的数据:所有的container   被存 放在是一个栈堆stack中,自动的将 ...

  4. Linux 多用户和多用户边界

    1. 需求背景 2. 多用户的边界: 独立的工作目录 3. 多用户的边界:可操作/访问的资源 4. 多用户的边界: 可执行的操作 5. 多用户的特性标识: UID和GID -------------- ...

  5. MongoDB在windows服务器安装部署及远程连接MongoDB

    (.\是表示在服务器的windows powershell下需要 表示信任此命令才会执行不然会报错,自己电脑上使用时可去掉.\) 在本地使用都不需要开启权限而在服务器上需要开启安全模式所以需要在原本的 ...

  6. JDK源码阅读(三) Collection<T>接口,Iterable<T>接口

    package java.util; public interface Collection<E> extends Iterable<E> { //返回该集合中元素的数量 in ...

  7. 移动App设计之分层架构+MVC

    http://www.cnblogs.com/Logen/archive/2012/11/08/2760638.html 场景分析:我们知道,一个移动设备的应用大多与网络有关,也就是说,我在移动设备上 ...

  8. 李洪强漫谈iOS开发[C语言-033]-三元运算符的应用

  9. 集成activiti-modeler 到 自己的业务系统

    本文目的: 将activit 5.12.1 的 modeler 流程设计器 集成到自己的工程中去 解决问题: 1. 复制相关资源文件到自己的工程中 2. 解决modeler的路径访问问题,迁移到非系统 ...

  10. Spring Batch系列总括(转载)

    最近一个项目在使用SpringBatch框架做一个电子商务平台的批处理.网上资料很有限,尤其是中文资料更是少之又少,官网上的文档也只是讲一些入门的基础知识,大部分高级特性都是一笔带过,讲解的很不彻底, ...