坐标变换(其一)
#include <iostream>
using namespace std;
const int N = 110;
int a[N][2], d[N][2], s[2];
int main(){
int n, m;
cin >> n >> m;
for (int i = 0;i < n; i ++){
cin >> d[i][0] >> d[i][1];
s[0] += d[i][0];
s[1] += d[i][1];
}
for (int i = 0;i < m; i ++){
cin >> a[i][0] >> a[i][1];
cout << a[i][0] + s[0] << ' ' << a[i][1] + s[1] << endl;
}
}
坐标变换(其二)
#include <iostream>
#include <cmath>
using namespace std;
const int N = 1e5 + 10;
int n, m;
double s1[N], s2[N];
int main()
{
s1[0] = 1;
cin >> n >> m;
for (int i = 1; i <= n; i ++){
int u;
double v;
cin >> u >> v;
if (u == 1){
s1[i] = s1[i - 1] * v;
s2[i] = s2[i - 1];
}else{
s1[i] = s1[i - 1];
s2[i] = s2[i - 1] + v;
}
}
for (int i = 0;i < m; i ++){
int l, r;
double x, y;
cin >> l >> r >> x >> y;
double k = s1[r] / s1[l - 1];
x *= k;
y *= k;
double t = s2[r] - s2[l - 1];
double x1 = x * cos(t) - y * sin(t);
double y1 = x * sin(t) + y * cos(t);
printf("%.3f %.3f\n", x1, y1);
}
}