//GNC #include #include #include #include #include #include using namespace std; typedef complex xy; typedef vector array; typedef vector matrix; array gauss_elim(matrix &m) { int N = m.size(); for(int i = 0; i < N; ++i){ xy pivot = m[i][i]; for(int j = i; j < N+1; ++j) m[i][j] /= pivot; for(int j = i + 1; j < N; ++j){ xy multip = m[j][i]; for(int k = i; k < N+1; ++k) m[j][k] -= multip * m[i][k]; } } /* for(int i = 0; i < N; ++i){ for(int j = 0; j < N+1; ++j){ cout << m[i][j] << " "; } cout << endl; } */ for(int i = N - 1; i >= 0; --i) for(int j = i - 1; j >= 0; --j) m[j][N] -= m[i][N] * m[j][i]; array ret(N); for(int i = 0; i < N; ++i){ ret[i] = m[i][N]; } return ret; } int main(void) { int N; bool first = true; ifstream cin("polygon.in"); cout.setf(ios::fixed); while(cin >> N){ if(!first) cout << endl; first = false; array m; for(int i = 0; i < N; ++i){ double x, y ; cin >> x >> y; m.push_back(xy(x, y)); } array rot; for(int i = 0; i < N; ++i){ double deg; cin >> deg; rot.push_back(polar(1., deg*2* M_PI / 360.)); } matrix mat(N, array(N+1, xy())); for(int i = 0; i < N; ++i){ mat[i][i] = rot[i]; mat[i][(i+1)%N] = xy(-1.); mat[i][N] = m[i] * rot[i] - m[i]; } array res = gauss_elim(mat); for(int i = 0; i < N; ++i){ cout << setprecision(2); cout << mat[i][N].real() << " " << mat[i][N].imag() << endl; } } return 0; }