试题编号: | 202309-2 |
试题名称: | 坐标变换(其二) |
时间限制: | 2.0s |
内存限制: | 512.0MB |
问题描述: | 问题描述对于平面直角坐标系上的坐标 (�,�),小 P 定义了如下两种操作:
设定好了包含 � 个操作的序列 (�1,�2,⋯,��) 后,小 P 又定义了如下查询:
对于给定的操作序列,试计算 � 个查询的结果。 输入格式从标准输入读入数据。 输入共 �+�+1 行。 输入的第一行包含空格分隔的两个正整数 � 和 �,分别表示操作和查询个数。 接下来 � 行依次输入 � 个操作,每行包含空格分隔的一个整数(操作类型)和一个实数(� 或 �),形如 1 �(表示拉伸 � 倍)或 2 �(表示旋转 �)。 接下来 � 行依次输入 � 个查询,每行包含空格分隔的四个整数 �、�、� 和 �,含义如前文所述。 输出格式输出到标准输出中。 输出共 � 行,每行包含空格分隔的两个实数,表示对应查询的结果。 样例输入 Data 样例输出 |
代码
#include <iostream>
#include <math.h>
using namespace std;
int main(){
int n,m;cin>>n>>m;
double b[n][2];
for (int i = 0; i < n; i++)
{
cin>>b[i][0];
cin>>b[i][1];
}
for (int i = 0; i < m; i++)//m个坐标
{
double first=0,end=0,x1=0,y1=0,x2=0,y2=0;
cin>>first>>end>>x1>>y1;
for(int j=first-1;j<end;j++){//first-end操作
if(b[j][0]==1){
x1=x1*b[j][1];
y1=y1*b[j][1];
}
if(b[j][0]==2){
x2=x1;y2=y1;
x1=x2*cos(b[j][1])-y2*sin(b[j][1]);
y1=x2*sin(b[j][1])+y2*cos(b[j][1]);
}
}
printf("%.2f",x1);
cout<<" ";
printf("%.2f",y1);
cout<<endl;
}
return 0;
}