목성으로의 여행

시간 제한6초메모리 제한512 MB

요약
회전한 정삼각형의 법선 벡터와 꼭짓점 A의 위치가 주어질 때, 세 꼭짓점과 바닥 점을 잇는 액추에이터의 길이를 계산한다.
난이도

보통10점 중 7점

유형
기하, 수학, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

서기 10,007년, 아랍 지역의 모든 맛있는 음식이 멸종했다. 다행히도 당신은 과거로 한 번 시간 여행을 해서 그 음식이 얼마나 맛있는지 맛볼 수 있었다. 외계인 소문이 당신에게 전해졌는데, 목성에는 아랍 음식이 아직 남아 있다고 한다. 외계인의 소문은 인간의 소문과 달리 대개 사실이므로, 당신은 목성에 가기 위해 직접 우주선을 만들기로 했다. 우주선에 내장한 제어 시스템을 시험하기 위해, 우주비행사 훈련 등의 목적으로 우주선의 비행과 그 비행 환경을 인공적으로 재현하는 장치인 비행 시뮬레이터를 만들려고 한다.

이 문제에서 비행 시뮬레이터는 한 변의 길이가 L인 2차원 정삼각형과, 그 삼각형의 각 꼭짓점 A, B, C에 각각 연결된 세 개의 액추에이터(길이를 바꿀 수 있는 선분으로 취급할 수 있는 기계 장치)로 이루어진다. 액추에이터의 다른 쪽 끝은 모두 (0, 0, −H)에 있는 고정된 베이스 점에 연결된다. 삼각형의 중점(위치 (0, 0, 0))은 같은 베이스에 구면 연결로 붙어 있어, 삼각형은 어느 방향으로든 회전할 수 있지만 그 중점은 움직일 수 없다.

삼각형의 회전을 조종하는 장치인 요크는 방향 벡터가 N = (Nx, Ny, Nz)를 따르며, 이 벡터는 항상 삼각형 평면의 법선이다. 요크의 방향을 바꾸면 각 액추에이터의 길이가 변하고 삼각형이 회전하며(요크는 삼각형에 대해 항상 법선을 유지한다), 중점은 (0, 0, 0)에 머문다. 처음에는 모든 액추에이터의 길이가 같고, 삼각형은 XY 평면에 수평으로 놓여 있으며(즉 z = 0), 요크는 양의 Z축을 가리킨다(즉 처음에 N = (0, 0, 1)). 점 A는 처음에 음의 X축 위에 있고(zA = yA = 0, xA < 0), 꼭짓점 A, B, C는 요크 방향을 기준으로 반시계 방향 순서이다.

주어진 새 요크 방향에 따라 시뮬레이터를 회전시키는 프로그램을 작성하시오. 형식적으로, 요크 방향과 회전 후 점 A의 위치가 주어질 때, 요크 방향이 여전히 삼각형의 법선이 되도록 꼭짓점 A, B, C에 각각 연결된 액추에이터의 길이 L1, L2, L3를 계산하시오.

입력

입력의 첫 줄에는 테스트 케이스의 수를 나타내는 정수 T가 주어진다.

각 테스트 케이스는 여덟 개의 정수 Nx, Ny, Nz, Ax, Ay, Az, L, H가 있는 한 줄로 이루어진다(−500 ≤ Ax, Ay, Az, Nx, Ny ≤ 500, 1 ≤ Nz, H, L ≤ 500). Nx, Ny, Nz는 회전 후의 요크 방향이고, Ax, Ay, Az는 회전 후 점 A의 위치이며, L은 삼각형의 변의 길이이고, H는 액추에이터가 연결되는 베이스의 점이다.

모든 테스트 케이스에 대해 다음 조건이 성립한다.

  • Ax, Ay, Az ≠ 0
  • AxNx + AyNy + AzNz = 0
  • Ax2 + Ay2 + Az2 = L2/3.

출력

각 테스트 케이스에 대해, 주어진 질의에 대응하여 꼭짓점 A, B, C에 연결된 액추에이터의 길이 L1, L2, L3를 공백으로 구분한 세 개의 소수(정확히 소수점 여섯 자리로 반올림)로 한 줄에 출력한다.

주어지는 입력은 해가 정확히 하나임을 보장한다.

힌트

아래 그림은 서로 다른 요크 방향에 대한 비행 시뮬레이터의 여러 위치를 보여준다.

예제1

  1. 예제 1

    입력
    2
    13 -18 1 7 5 -1 15 12
    -12 -17 1 7 -5 -1 15 3
    
    예상 출력
    13.964240 20.238885 7.237923
    8.831761 11.473743 6.507936