搭建企业网站具体过程,个人摄影网站,kencms内容管理系统,教育行业建设网站问题描述 对于平面直角坐标系上的坐标 (x,y)#xff0c;小 P 定义了如下两种操作#xff1a;
拉伸 k 倍#xff1a;横坐标 x 变为 kx#xff0c;纵坐标 y 变为 ky#xff1b;
旋转 θ#xff1a;将坐标 (x,y) 绕坐标原点 (0,0) 逆时针旋转 θ 弧度#xff08;0≤θ小 P 定义了如下两种操作
拉伸 k 倍横坐标 x 变为 kx纵坐标 y 变为 ky
旋转 θ将坐标 (x,y) 绕坐标原点 (0,0) 逆时针旋转 θ 弧度0≤θ2π。易知旋转后的横坐标为 xcosθ−ysinθ纵坐标为 xsinθycosθ。
设定好了包含 n 个操作的序列 (t1,t2,⋯,tn) 后小 P 又定义了如下查询
i j x y坐标 (x,y) 经过操作 ti,⋯,tj1≤i≤j≤n后的新坐标。 对于给定的操作序列试计算 m 个查询的结果。
输入格式 从标准输入读入数据。
输入共 nm1 行。
输入的第一行包含空格分隔的两个正整数 n 和 m分别表示操作和查询个数。
接下来 n 行依次输入 n 个操作每行包含空格分隔的一个整数操作类型和一个实数k 或 θ形如 1 k表示拉伸 k 倍或 2 θ表示旋转 θ。
接下来 m 行依次输入 m 个查询每行包含空格分隔的四个整数 i、j、x 和 y含义如前文所述。 ————————————————注意计算旋转结果时要避免纵坐标受到横坐标已经计算从而变化的影响此处加入代码
double tempc;
用于规避该问题。
#include bits/stdc.h
using namespace std;
int main() {int n,m;cinnm;struct op {int type;double rat;}ops[n];for (int i 0; i n; i) {cinops[i].type;scanf(%lf, (ops[i].rat));}for (int i 0; i m; i) {int a,b;double c,d;cinab;scanf(%lf, c);scanf(%lf, d);for (int ja-1;jb-1;j) {if (ops[j].type1) {cc*ops[j].rat;dd*ops[j].rat;}else {double tempc;cc*cos(ops[j].rat)-d*sin(ops[j].rat);dtemp*sin(ops[j].rat)d*cos(ops[j].rat);}}coutfixedsetprecision(3)c fixedsetprecision(3)dendl;}return 0;
}