平面上有N个点,还有M个变换操作,每个变换操作都是其中的一种:
| 操作 | 格式 | 说明 |
|---|---|---|
| 平移 | M a b | 沿向量 (a,b) 平移 |
| 缩放 | Z c | 坐标缩放成原来的 c 倍 |
| 翻转 | X c | 沿直线 x = c 翻转 |
| 翻转 | Y c | 沿直线 y = c 翻转 |
| 旋转 | R a | 绕原点顺时针旋转 a 度 |
求按顺序经过这些操作以后的每个点坐标。
第一行包含一个正整数 N 和 M。 接下来 N 行,每行包含两个实数,描述每个点的坐标。 再接下来 M 行,每行描述一个操作。
输出共 N 行,每行描述一个坐标,保留 6 位小数。按照输入顺序输出。
3 5
0.0 1.00
0.0 0.00
1.0 1.00
Y 0.0
M 4.0 -3.0
X 0.0
R 90.0
Z 0.500
-2.000000 2.000000
-1.500000 2.000000
-2.000000 2.500000
| 编号 | N | M | 操作 | 编号 | N | M | 操作 |
|---|---|---|---|---|---|---|---|
| 10 | 10 | 10 | M Z X Y R | 5 | 100000 | 100000 | M |
| 1 | 100 | 1000 | M Z X Y R | 6 | 80000 | 60000 | M Z X Y R |
| 2 | 1000 | 5000 | M Z X Y R | 7 | 80000 | 80000 | M Z X Y R |
| 3 | 100000 | 100000 | X Y | 8 | 100000 | 80000 | M Z X Y R |
| 4 | 100000 | 100000 | Z R | 9 | 100000 | 100000 | M Z X Y R |
输入与输出所有实数的绝对值不超过 1000000。
如果你的输出与标准输出的误差不超过 0.00001,那么就可以被认为是正确的。
如果一个点 (x0,y0)绕原点顺时针旋转 a 度,那么旋转后坐标为:
(y0 × sina + x0 × cosa,y0 × cosa - x0 × sina) 思路是对于每一个点 (x , y),变换后的坐标(x’ , y’)一定可以用 (a1x+b1y+c1 , a2x+b2y+c2) 来表示。只要先求出这六个系数,最后把每个点的坐标带入即得变换后的坐标。 但具体如何维护?