坐标变换(其一)

#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);
    }
    
}

标签: none