공항으로 접근하던 비행기가 만 위를 지나면서 무언가를 떨어뜨렸다는 신고가 들어왔다. 경찰은 그 물건을 공범이 회수하려던 밀수품으로 보고, 물건을 떨어뜨렸을 가능성이 있는 비행기가 다시 만 위로 공항에 접근할 때마다 감시하기로 했다. 만 주변에는 야간 투시 장비를 갖춘 관측소가 세 곳 있다.
관측소 0을 원점으로 두고 동쪽을 x축의 양의 방향, 북쪽을 y축의 양의 방향으로 잡는다. 관측소 1은 관측소 0에서 동쪽으로 3.715km, 북쪽으로 1.761km 떨어져 있고, 관측소 2는 동쪽으로 2.894km, 남쪽으로 2.115km 떨어져 있다. 거리 단위는 모두 킬로미터다.
| 관측소 | x | y |
|---|---|---|
| 0 | 0.000 | 0.000 |
| 1 | 3.715 | 1.761 |
| 2 | 2.894 | -2.115 |
의심스러운 비행기가 만을 건너면 세 관측자는 서로 연락하면서 장비로 비행기를 따라간다. 떨어지는 물체를 본 관측자는 물체의 방향과 그 방향의 신뢰도를 기록한다. 신뢰도 CL은 0부터 1까지의 값이다. 0은 비행기 쪽을 대충 가리켰다는 뜻이고, 1은 물체가 물에 떨어진 지점을 정확히 가리켰다는 뜻이다.
세 시선은 보통 한 점에서 만나지 않고 삼각형을 이룬다. 실제 낙하 지점의 추정값은 각 시선까지의 거리 di를 제곱한 뒤 가중치 CLi+0.2를 곱해 모두 더한 값
∑i=02(CLi+0.2)di2
를 최소로 만드는 점 (x,y)로 정한다. i번 시선은 관측소 i를 지나면서 관측자가 기록한 방향을 향하는 직선이고, di는 점 (x,y)에서 이 직선까지의 수직 거리다. 시선은 반직선이 아니라 양쪽으로 무한히 뻗은 직선으로 본다.
세 관측자의 방향과 신뢰도가 주어지면 위 합을 최소로 만드는 점 (x,y)를 구하는 프로그램을 작성하라.
첫 줄에 데이터 집합의 개수 P (1≤P≤1000)가 주어진다. 이어지는 P개의 줄이 각각 데이터 집합 하나이며, 모두 같은 방법으로 독립해서 처리한다.
각 데이터 집합은 한 줄이다. 데이터 집합 번호 N 다음에 공백으로 구분한 실수 여섯 개가 오고, 순서대로 a0, CL0, a1, CL1, a2, CL2다. ai는 관측소 i에서 잰 방위각으로 북쪽을 0으로 하여 시계 방향으로 잰 각도다 (0≤ai<360). CLi는 관측자 i의 신뢰도다 (0≤CLi≤1).
세 시선의 방향이 모두 평행한 입력은 주어지지 않는다. 따라서 합을 최소로 만드는 점은 항상 하나로 정해진다.
데이터 집합마다 한 줄씩 출력한다. 각 줄에는 입력에 주어진 데이터 집합 번호 N을 그대로 쓰고, 공백을 하나 둔 다음 x와 y를 공백으로 구분해 쓴다. x는 관측소 0에서 동쪽으로 떨어진 거리이고, y는 북쪽(양수) 또는 남쪽(음수)으로 떨어진 거리이며, 단위는 킬로미터다.
x와 y는 소수점 아래 넷째 자리에서 반올림해 셋째 자리까지, 항상 세 자리를 채워 출력한다. 두 좌표 모두 반올림 경계에서 10−5 이상 떨어져 있으므로 반올림 방향이 갈리는 입력은 없다. 반올림한 값이 0이면 -0.000이 아니라 0.000으로 출력한다.