求问一道题
查看原帖
求问一道题
811069
What__can__I__say楼主2024/12/13 22:18

坐标变换 (change)

题目描述

平面上有N个点,还有M个变换操作,每个变换操作都是其中的一种:

操作格式说明
平移M a b沿向量 (a,b) 平移
缩放Z c坐标缩放成原来的 c
翻转X c沿直线 x = c 翻转
翻转Y c沿直线 y = c 翻转
旋转R a绕原点顺时针旋转 a

求按顺序经过这些操作以后的每个点坐标。

输入格式

第一行包含一个正整数 NNMM。 接下来 NN 行,每行包含两个实数,描述每个点的坐标。 再接下来 MM 行,每行描述一个操作。

输出格式

输出共 NN 行,每行描述一个坐标,保留 66 位小数。按照输入顺序输出。

样例输入 #1

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 

样例输出 #1

-2.000000 2.000000
-1.500000 2.000000
-2.000000 2.500000

数据范围

编号NM操作编号NM操作
101010M Z X Y R5100000100000M
11001000M Z X Y R68000060000M Z X Y R
210005000M Z X Y R78000080000M Z X Y R
3100000100000X Y810000080000M Z X Y R
4100000100000Z R9100000100000M Z X Y R

输入与输出所有实数的绝对值不超过 10000001000000

评分规则

如果你的输出与标准输出的误差不超过 0.000010.00001,那么就可以被认为是正确的。

公式提示

如果一个点 (x0x0y0y0)绕原点顺时针旋转 aa 度,那么旋转后坐标为:

y0y0 ×\times sinasina + x0x0 ×\times cosacosay0y0 ×\times cosacosa - x0x0 ×\times sinasina

思路是对于每一个点 (x , y),变换后的坐标(x’ , y’)一定可以用 (a1x+b1y+c1 , a2x+b2y+c2) 来表示。只要先求出这六个系数,最后把每个点的坐标带入即得变换后的坐标。 但具体如何维护?

2024/12/13 22:18
加载中...