푸시-투 망원경

시간 제한1초메모리 제한128 MB

요약
두 기준별의 설정값으로 회전 적도 좌표계 변환을 구한 뒤, 카탈로그 별들의 방위각과 고도를 계산해 출력하거나 NOT VISIBLE을 인쇄한다.
난이도

어려움10점 중 8점

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

문제

푸시-투 망원경은 한 번 설정되고 나면, 내장 목록에 있는 별을 보기 위해 망원경을 어느 방향으로 향해야 하는지 방위각(azimuth, 망원경의 기준 평면에서 반시계 방향으로 잰 각)과 고도(elevation, 기준 평면 위로 잰 각)로 알려 준다.

설정은 다음과 같이 이루어진다. 먼저 이미 알고 있는 별 하나에 망원경을 향한 뒤, 그 별을 목록에서 찾아 선택한다. 이어서 첫 번째 별과 너무 가깝지 않은 두 번째 알려진 별에 대해 같은 과정을 반복한다.

목록에 있는 별의 방향은 지심 적도 좌표계(geocentric equatorial coordinates)로 주어진다. 원점은 지구의 중심이고, 양의 zz축은 북극을 지나며, xyxy평면은 적도를 담는다. xx축은 춘분점(태양이 적도면에 있는 때)에서 태양을 향한다. 별의 좌표는 적경 α\alpha(xyxy평면에서 xx축으로부터 반시계 방향으로 잰 각, 단위 도)와 적위 δ\delta(xyxy평면 위(양) 또는 아래(음)로 잰 각)로 주어진다.

이 좌표계에서 지구는 초당 2π⋅1.002737909386400\dfrac{2\pi \cdot 1.0027379093}{86400} 라디안의 각속도로 자전한다. (지구가 태양 주위를 돌기 때문에, 같은 지점 위로 태양이 다시 오게 하려면 360∘360^\circ보다 조금 더 돌아야 한다.)

설정 중 별을 선택하면, 시스템은 시스템이 켜진 뒤 흐른 시각(초), 그 별을 향했을 때 망원경의 방위각과 고도, 그리고 목록에서 그 별의 번호를 기록한다. 알려진 별을 두 번 선택하고 나면, 시스템은 지심 적도 좌표에서 국소(망원경) 좌표로 가는 변환을 계산한다. 이후 관측할 별을 선택하면, 시스템은 그 별의 지심 적도 좌표와 현재 시각을 이용해 향해야 할 방위각과 고도를 계산한다.

푸시-투 망원경을 구현하는 프로그램을 작성하라.

망원경 좌표계가 지구와 함께 회전하므로, 별의 좌표에는 회전하는 지심 적도 좌표계를 쓰는 것이 편리하다. 이 좌표계는 시스템이 켜지는 순간 지심 적도 좌표계와 일치하고, 그 뒤로는 지구와 함께 회전한다. 이 좌표계에서 적위 δ\delta는 그대로이지만, 적경은 시간에 따라 변한다.

αrot=α−t⋅rotation_rate\alpha_{rot} = \alpha - t \cdot \text{rotation\_rate}

여기서 αrot\alpha_{rot}는 회전 좌표계에서의 적경(라디안), α\alpha는 지심 적도 좌표계에서의 적경(라디안), tt는 시스템이 켜진 뒤 흐른 시간(초), rotation_rate\text{rotation\_rate}는 위에서 정의한 지구 자전 각속도이다.

입력

첫 줄에는 공백으로 구분된 두 정수가 주어진다. 첫 번째 정수는 목록에 있는 별의 수 SS (0<S≤1000 < S \le 100)이고, 두 번째 정수는 데이터 집합의 수 PP (0<P<1000 < P < 100)이다.

다음 SS개의 줄은 별 목록이다. 각 줄에는 공백으로 구분된 두 실수, 적경 α\alpha와 적위 δ\delta가 도 단위로 주어진다. 별 목록은 하나뿐이며 모든 데이터 집합에 공통으로 사용된다. 각 데이터 집합은 이 목록을 이용해 서로 독립적으로, 동일한 방식으로 처리된다.

별 목록 다음에는 PP개의 데이터 집합이 이어진다. 각 데이터 집합은 여러 줄로 이루어진다. 데이터 집합의 첫 줄에는 찾을 별의 수 TT (T≤10T \le 10)가 하나의 정수로 주어진다.

이어지는 두 줄은 그 데이터 집합의 설정 정보이다. 각 설정 줄에는 두 정수와 두 실수가 주어진다. 두 정수는 시스템이 켜진 뒤 흐른 시각 tt(초)와 목록에서 그 알려진 별의 번호 II이다. 두 실수는 망원경 좌표에서 그 별의 방위각과 고도(도)이다.

데이터 집합의 남은 TT개의 줄은 사용자가 관측하려는 별을 나타낸다. 각 줄에는 공백으로 구분된 두 정수가 주어진다. 첫 번째는 시스템이 켜진 뒤 흐른 시각(초)이고, 두 번째는 목록에서 관측할 별의 번호이다.

별의 번호는 11부터 시작한다.

출력

각 데이터 집합마다 여러 줄을 출력한다. 관측하려는 각 별에 대해 한 줄씩 출력한다. 계산된 고도가 00보다 작으면(별이 지평선 아래에 있으면) 그 줄에는 따옴표 없이 NOT VISIBLE을 출력한다. 그렇지 않으면 향해야 할 방위각과 고도를 도 단위로 소수점 아래 한 자리까지 출력한다. 방위각은 [0,360)[0, 360) 범위로 정규화하여 출력한다.

예제1

  1. 예제 1

    입력
    15 2
    39.90 -16.70
    34.65 -52.70
    76.85 -60.80
    70.85 19.20
    95.19 38.80
    28.12 46.00
    27.62 -8.20
    43.17 5.20
    14.27 -57.20
    37.62 7.40
    67.85 -60.40
    103.47 8.90
    64.05 -63.10
    28.10 16.50
    83.64 -26.40
    3
    20 14 144.70 55.24
    73 15 321.36 55.97
    264 8
    1121 4
    2319 9
    3
    39 2 190.46 80.21
    73 13 354.21 81.15
    133 8
    1846 11
    2746 5
    
    예상 출력
    146.8 73.0
    70.5 63.7
    245.8 24.3
    133.5 26.7
    7.7 83.8
    NOT VISIBLE