#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "assert.h" using namespace std; //[n*p] * [p*m] => [n*m] template vector< vector > multmat(const vector > &A, const vector> &B, int n, int p, int m){ vector > C(n, vector(m,0)); for(int i=0; i> n; vector ox(n), oy(n), r(n); vector>> W(n); for(int i=0; i> ox[i] >> oy[i] >> r[i]; vector> shift0 = { {1,0,-ox[i]}, {0,1,-oy[i]}, {0,0,1} }; vector> shift1 = { {1,0,ox[i]}, {0,1,oy[i]}, {0,0,1} }; vector> rot = { {round(cos(PI*r[i]/180.0)), round(-sin(PI*r[i]/180.0)), 0}, {round(sin(PI*r[i]/180.0)), round( cos(PI*r[i]/180.0)), 0}, {0,0, 1} }; vector> tmp = multmat(rot, shift0, 3,3,3); W[i] = multmat(shift1, tmp, 3,3,3); } vector> A = { {1,0,0}, {0,1,0}, {0,0,1} }; for(int i=0; i> tmp = multmat(W[i], A, 3,3,3); A = tmp; } int m; cin >> m; vector px(m), py(m); for(int i=0; i> px[i] >> py[i]; } for(int i=0; i> ans = { {px[i]}, {py[i]}, {1} }; // for(int j=0; j> tmp = multmat( W[j], ans, 3,3,1 ); // ans = tmp; // } auto res = multmat(A, ans, 3,3,1); cout << res[0][0] << " " << res[1][0] << endl; } return 0; }