Problem A:Rescue The Princess
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
Problem Description
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 equilateraltriangle 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?
Input
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.
Output
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.
Sample Input
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
Sample Output
(-50.00,86.60)
(-86.60,50.00)
(-36.60,136.60)
(1.00,1.00)
题意:
给出 T,代表有 T(1 ~ 100) 个 Test。每个 Test 给出 x1,y1 ,x2,y2,(绝对值 <= 1000)代表等边三角形的其中两个点,要求输出这个等边三角形第三个点的坐标,逆时针方向。
思路:
数学。求出两个点的终点坐标 (a,b)故可以得出方程,设给出两点构成的直线斜率为 k,与该指向垂直并经过(a,b)点的直线为 k1,等边三角形边长为 d:
r = sqrt(3) * d / 2;
k = (y1 - y2) / (x1 - x2);
k * k1 = -1;
(x3 - a)^ 2 + (y3 - b)^ 2 = r ^ 2;
(y3 - b)/ (x3 - a) = k1;
由这些式子即可得出 x3,y3。并且对 x1 == x2 和 y1 == y2 进行另外讨论。
AC:
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; double dis(double x1, double y1, double x2, double y2) { double xx = (x1 - x2) * (x1 - x2); double yy = (y1 - y2) * (y1 - y2); return sqrt(3) * sqrt(xx + yy) / 2; } int main () { int t; scanf("%d", &t); while (t--) { double x1, y1, x2, y2; double d; scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2); d = dis(x1, y1, x2, y2); if (x1 == x2) printf("(%.2f,%.2f)\n", x1 + (y1 > y2 ? d : -d), (y1 + y2) / 2); else if (y1 == y2) printf("(%.2f,%.2f)\n", (x1 + x2) / 2, y1 + (x1 > x2 ? -d : d)); else { double a = (x1 + x2) / 2, b = (y1 + y2) / 2; double k = (y1 - y2) / (x1 - x2); double xa, xb, ya, yb; xa = a + sqrt((k * k * d * d) / (1 + k * k)); xb = a - sqrt((k * k * d * d) / (1 + k * k)); ya = b - (xa - a) / k; yb = b - (xb - a) / k; y1 < y2 ? printf("(%.2f,%.2f)\n", xb, yb) : printf("(%.2f,%.2f)\n", xa, ya) ; } } return 0; }
相关推荐
This is the code release of the Amsterdam Oxford Joint Rescue Force for the RoboCup Rescue Simulation Virtual Robot 2009 competition.
redhat6.x mondo Rescue 离线包所有依赖包,直接安装使用。
东南大学robocup rescue底层代码
5G_to_the_Rescue_Promise_Uncertainty
利用SQL日志找回丢失的数据的免费工具SQL Log Rescue
JavaScript
救援环境下的MANEMO网络结构,张洁,刘元安,移动多跳自组织网络(MANET)与网络移动性(NEMO)的融合已成为网络融合领域一个新兴的研究方向。这两种网络的融合可以相互取长补短
robocup rescue server
语言:English,Kiswahili 一些有趣的怪兽接过你的公主并把她锁在城堡里。你需要找到8把钥匙,击败怪兽并营救他们。 一些有趣的怪物把你的公主锁在城堡里。 您需要找到8把钥匙,击败怪物并营救公主!...
卡巴斯基 杀毒 启动 rescue2usb
Linux 内核崩溃 引导修复 rescue 救援笔记 vmlinuxz-2.6.32-220.el6.x86_64 initramfs-2.6.32-220.el6.x86_64.img kernel 相关文件丢失:
该资源实用于redhat6.5版本的系统,如果你不是redhat6的版本,请自行去官网下载安装包,如果你不是redhat6的版本,请自行去官网下载安装包
linux援救模式:linux rescue使用详细图解
华硕路由固件恢复工具Rescue_2102.zip ,这个适用于 windows 10 ,路由器固件的话需要另外下载。
Rescue and Recovery 4.0 部署安装指南中文版
浙大Robocup rescue simulation
以下软件介绍为软件翻译后所得:Image Rescue 3能恢复图像的救援最流行的图像文件(包括的JPEG,TIFF,NEF,CRW,进入,及,等等),视频文件(包括mov,mpg4以及avi),和音频文件(包括新加坡,wav,mp3)用于或损坏的闪存卡片。...
RESCUE文件恢复软件 小巧绿色 不占空间
在日常维护工作中如果经常需要安装很多软件在服务器上,且服务器数量较多,可以通过Mondo Rescue开源工具来实现linux系统的打包备份,将已安装好的系统打包成镜像文件,然后制作成自定义的系统,在需要部署服务器时...