만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

회전 변환

시간 제한2초메모리 제한1024 MB

요약
3x3 회전 행렬이 주어질 때, 이 행렬을 만드는 회전각(도 단위)과 단위 축 벡터를 구합니다.
난이도

보통10점 중 6점

유형
기하, 행렬, 수학
정답자
아직 제출이 없습니다

문제


줄리아는 단순한 운동을 아주 좋아하며, 특히 3차원 공간에서의 운동을 좋아한다. 최근 그녀는 원점을 지나는 축을 중심으로 한 회전에 대응하는 행렬을 찾았다. 이 회전은 단위 벡터 v=(vxvyvz)v = \begin{pmatrix} v_x \\ v_y \\ v_z \end{pmatrix}와 회전각 α\alpha로 정해진다.

vv의 끝에서 원점을 바라볼 때 회전이 반시계 방향이면 α\alpha는 양수이고, 그렇지 않으면 음수이다.

회전 행렬은 점 (xyz)\begin{pmatrix} x \\ y \\ z \end{pmatrix}를 다음과 같이 (x′y′z′)\begin{pmatrix} x' \\ y' \\ z' \end{pmatrix}로 옮긴다.

(x′y′z′)=(A11A12A13A21A22A23A31A32A33)(xyz).\begin{pmatrix} x' \\ y' \\ z' \end{pmatrix} = \begin{pmatrix} A_{11} & A_{12} & A_{13} \\ A_{21} & A_{22} & A_{23} \\ A_{31} & A_{32} & A_{33} \end{pmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix}.

줄리아는 vv와 α\alpha의 값을 모른다. 그녀는 단순한 운동을 이어가기 위해 이 값들을 복원해 달라고 부탁했다.

입력

행렬 AA가 주어진다. 모든 ii, jj에 대해 ∣Aij′−Aij∣<10−13|A'_{ij} - A_{ij}| < 10^{-13}을 만족하는 회전 행렬 A′A'가 존재함이 보장된다.

출력

첫째 줄에 각도 α\alpha를 도 단위로 출력한다. 둘째 줄에 단위 벡터 vv의 좌표를 출력한다. 1≤∣α∣≤1791 \le |\alpha| \le 179가 보장된다. 모든 수는 가능한 한 정밀하게 출력한다. 출력한 각도와 벡터로 만든 행렬과 각 AijA_{ij}의 차이가 10−610^{-6}을 넘지 않으면 정답으로 인정한다.

예제1

  1. 예제 1

    입력
    0 -1 0
    1 0 0
    0 0 1
    
    예상 출력
    90
    0 0 1