程序设计能力实训

1038. 极坐标排序

单点时限: 2.0 sec

内存限制: 256 MB

在平面上,确定一个点的位置通常有下面两种表示方法:

当极坐标系中的极点 $O$ 与直角坐标系中的原点 $O$ 重合,极轴 $OX$ 与直角坐标系中的 $X$ 轴的正半轴重合,并且两种坐标系的单位长度相同,那么平面内任意一点 $P$ 的直角坐标与极坐标可以互相转换。

例如:

点 p 直角坐标为:$(1,1$),则对应的极坐标为:$(1.4142, \frac{ \pi }{4})$。

点 p 直角坐标为:$(-1,1$),则对应的极坐标为:$(1.4142, \frac{3 \pi }{4})$。

点 p 直角坐标为:$(-1,-1$),则对应的极坐标为:$(1.4142, \frac{5 \pi }{4})$。

点 p 直角坐标为:$(1,-1$),则对应的极坐标为:$(1.4142, \frac{ 7\pi }{4})$。

点 p 直角坐标为:$(0,1$),则对应的极坐标为:$(1, \frac{ \pi }{2})$。

点 p 直角坐标为:$(1,0$),则对应的极坐标为:$(1,0)$。

给出 $N$ 个点的直角坐标 $(x,y)$,请计算出这些点对应的极坐标,将这 $N$ 个点按照极角 $\theta$ 从小到大排序,如果两个点的极角相同,则将它们按照极径 $\rho$ 由大到小排序。

注意:$\rho≥0$,极角 $0≤ \theta <2 \pi$

输入格式

第 $1$ 行:整数 $T$ ($1 \le T \le 10$) 为问题数。

对于每个问题,按如下格式输入:

第 $1$ 行:输入一个正整数 $N(1≤N≤1000)$,表示点的个数;

接下来 $N$ 行,每行输入两个浮点数 $x,y$,表示点的直角坐标,两个数之间由一个空格分隔。

输出格式

对于每个问题,输出一行问题的编号($0$ 开始编号,格式:case #0: 等)。

接下来 $N $行输出排序后的点的极坐标($\rho , \theta$),每行输出一个点的极坐标,小数点后保留 $4$ 位,极角采用弧度表示。

样例

Input
3
5
1.0 1.0
2.0 2.0
-1.0 1.0
0 1.0
1.0 0
1
0 -1.0
6
1.0 1.0
0 1.0
1.0 0
-1.0 1.0
-1.0 -1.0
1.0 -1.0
Output
case #0:
(1.0000,0.0000)
(2.8284,0.7854)
(1.4142,0.7854)
(1.0000,1.5708)
(1.4142,2.3562)
case #1:
(1.0000,4.7124)
case #2:
(1.0000,0.0000)
(1.4142,0.7854)
(1.0000,1.5708)
(1.4142,2.3562)
(1.4142,3.9270)
(1.4142,5.4978)
不限期开放

题目列表