#include #include #include using namespace std; vector solve_linear_equations(const vector > &coef) { vector > a(coef); const int N = a.size(); for (int k = 0; k < N; k++) { int pivot = k; for (int i = k+1; i < N; i++) if (fabs(a[i][k]) > fabs(a[pivot][k])) pivot = i; if (pivot != k) for (int j = k; j <= N; j++) swap(a[k][j], a[pivot][j]); if (a[k][k] == 0.0) return vector(); for (int j = k+1; j <= N; j++) a[k][j] /= a[k][k]; for (int i = 0; i < N; i++) if (i != k) for (int j = k+1; j <= N; j++) a[i][j] -= a[i][k] * a[k][j]; } vector answer(N); for (int i = 0; i < N; i++) answer[i] = a[i][N]; return answer; } int main() { for (int n; scanf("%d", &n) == 1; ) { vector mx(n), my(n), a(n); for (int i = 0; i < n; i++) scanf("%lf%lf", &mx[i], &my[i]); for (int i = 0; i < n; i++) { scanf("%lf", &a[i]); a[i] *= M_PI / 180; } vector > coef(2*n, vector(2*n+1, 0)); for (int i = 0; i < n; i++) { // P[j] = M[i] + (P[i] - M[i]) * complex(cos(a[i]), sin(a[i])) int j = (i+1) % n; double c = cos(a[i]); double s = sin(a[i]); coef[2*i ][2*i ] = -c; coef[2*i ][2*i+1] = s; coef[2*i ][2*j ] = 1; coef[2*i ][2*n ] = (1 - c) * mx[i] + s * my[i]; coef[2*i+1][2*i ] = -s; coef[2*i+1][2*i+1] = -c; coef[2*i+1][2*j+1] = 1; coef[2*i+1][2*n ] = -s * mx[i] + (1 - c) * my[i]; } vector answer = solve_linear_equations(coef); for (int i = 0; i < 2*n; i++) if (fabs(answer[i]) < 0.005) answer[i] = 0; static bool first = true; if (first) first = false; else printf("\n"); for (int i = 0; i < n; i++) printf("%.2f %.2f\n", answer[2*i], answer[2*i+1]); } return 0; }