3차원 좌표변환
시간 제한1초메모리 제한512 MB
최대 1000개의 점을 직교좌표계, 원통좌표계, 구면좌표계 사이에서 오차 1e-6 이내로 변환한다.
문제
3차원 공간에서 점의 위치를 표현하는 방식은 여러 가지가 있다. 일반적으로 많이 쓰이는 직교좌표계는 x축, y축, z축 방향의 1차원 위치를 통해 점의 위치를 표현한다. 이 문제에서는 점의 3차원 위치를 표현하는 또 다른 두 가지 방식을 소개한다. 편의상 점 의 직교좌표계상 좌표를 라 하자.
- 원통좌표계: 에서 xy평면에 내린 수선의 발을 라고 하자. 의 길이를 , xy평면을 내려다보면서 x축의 양의 방향을 동경으로 하여 까지 시계 반대 방향으로 잰 각을 라 할 때, 의 좌표는 이다. 단, 인 경우 으로 정의한다.
- 구면좌표계: 에서 xy평면에 내린 수선의 발을 라고 하자. 의 길이를 , z축의 양의 방향을 동경으로 하여 까지 잰 각 중 크지 않은 것을 , xy평면을 내려다보면서 x축의 양의 방향을 동경으로 하여 까지 시계 반대 방향으로 잰 각을 라 할 때, 의 좌표는 이다. 단, 인 경우 으로 정의하고, 인 경우 으로 정의한다.
직교좌표계, 원통좌표계, 구면좌표계 중 하나를 사용하는 의 좌표가 주어졌을 때, 이를 다른 하나의 좌표계를 사용하는 좌표로 바꿔보자.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다.
둘째 줄부터 테스트 케이스가 주어진다. 각 테스트 케이스는 개의 줄로 이루어져 있다.
테스트 케이스의 첫째 줄에는 변환할 좌표의 좌표계 번호와 출력할 좌표의 좌표계 번호가 주어진다. 1은 직교좌표계, 2는 원통좌표계, 3은 구면좌표계이다. 두 좌표계 번호는 서로 다르다.
테스트 케이스의 둘째 줄에는 변환할 좌표를 나타내는 세 실수 , , 가 소수점 아래 여덟째 자리까지 주어진다. 는 직교좌표계의 경우 이고, 원통좌표계의 경우 이고, 구면좌표계의 경우 이다.
출력
각 테스트 케이스마다 한 줄에 변환한 좌표를 나타내는 세 실수를 출력한다.
절대오차 혹은 상대오차는 까지 허용한다.