컴퓨터천문학

[컴퓨터 천문학] 05. julian day를 CALDAY로(1)

by 박종현 posted Apr 25, 2011
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

이 글은 독일우주운영센터(GSOC)의 과학자인 Oliver Montenbruck와 Thomas Pfleger가 공동 출판한 Astronomy with your Personal Computer를 의역 후,  작성된 것임을 알리며, 원저의 베이직 코드를 웹 환경에서 쉽게 실행해 볼 수 있도록 자바스크립트 코드로 변경하여 작성하였음을 밝힙니다. 자바스크립트 코드와 이 글의 내용은 글쓴이의 2차 저작물 이므로 배포나 내용의 임의 변경에 대해 글쓴이의 동의가 있어야 합니다.

 

천문학의 계산결과는 보통 일수나 시간의 형태로 나타납니다.

 

앞의 글에서 우리는 1900년 1월 0.5를 기원으로 한 DJ를 계산하였습니다.
예를 들어 월식의 경우 DJ = 30815.69라는 계산 결과값을 가질수 있었죠.


하지만 사람은 숫자만 보고 이것이 무엇을 의미하는지 단번에 알아내기 어렵습니다.

따라서 우리는 이러한 숫자를 우리가 해석할 수 있는 친숙한 형태의 것으로 변환해야 합니다.

앞에서 달력 날짜를 줄리안 데이로 변환하기 위해 JULDAY이라는 변환 함수를 만들었습니다.

이와 마찬가지로 반대로 변환하기 위해선 CALDAY라는 함수가 필요합니다.


이 CALDAY 함수는 1900년 1월 0.5 이후 계산된 줄리안 데이의 일수인 DJ, 날짜에 소수가 포함된 월수를 DY에 그리고 월수인 MN과 연도인 YR로 변환을 합니다. 그리고 소수가 포함된 날짜는 FD라는 변수에도 반횐 됩니다.

 

그러므로 DJ가 30815.69인 값을 가진다면 이것은 CALDAY 함수에 의해 DY=15.19,MN=5, YR=1984 그리고 FD=0.19로 변환을 하게 됩니다. 우리는 이 수치 데이터를 통해 결론에 도달할 수 있고, 곧바로 해석할 수 있습니다.
따라서 월식은 1984년 5월 15일 4시33분(UT)가 되는 것입니다.

 

CALDAY의 모든 DJ는 기원전 4713년 1월의 정오에 해당하는 값인 -2415020(JD=0) 보다 크거나 작습니다.
왜냐하면 앞의 JULDAY에서 설명했듯이 0년은 존재하지 않기 때문이다.
따라서 시퀀스는 BC -3, -2. -1, 1, 2, 3 AD가 됩니다.

하지만 컴퓨터에서는 -1 보다 큰 값을 0으로 보고 또한 1보다 작은 값을 0으로 보기 때문에 에러가 발생하게 됩니다.
이것을 바로 잡기 위해서는 Greatest and least integer function 이라는 것을 사용해야 합니다.
(해당함수에 대한 설명: http://cnx.org/content/m15299/latest/)


 
알고리즘
CALDAY 계산 로직에서 사용할 값을 몇개 만듭니다.
D라는 변수에는 DJ + 0.5를 합니다. (0.5를 더하는 이유는 앞의 강좌에 설명해 놨습니다.)
I라는 변수값은 D의 값을 Greatest and least integer 함수에 넣어 0이 아닌 값이 반환된 결과를 저장하고 있습니다.
B라는 변수값은 365.25를 위의 I값으로 나누고 8.02601E-1 값을 더한 후 Greatest and least integer 함수에 전달하고 반환된 값을 저장합니다.

C는 I-(Greatest and least integer(365.25 * B) + 7.50001E-1) + 416 값을 가집니다.
G는 Greatest and least integer에 30.6001을 C로 나눈 값을 넣어 반환된 값을 가집니다.
마지막으로 FD는 D-I값을 가집니다.
만약에 FD가 1이라면 FD = 0의 값을 가지고 위에 계산된 I값에 1을 추가합니다.
또한 여기서 계산된 I값이 -115860보다 크다면 다음의 수식을 통해 I값을 재계산 합니다.
Greatest and least integer 함수는 GLI라는 약어로 표기합니다.
A = GLI((I/36524.25) + 9.9835726E-1)+14
I = I + 1 + A - GLI(A/4)
여기서 계산된 값들은 CALDAY 값을 구하는데 사용하게 됩니다.
보기 편하게 수식으로 필요한 값들을 정리해 보겠습니다.

  G = GLI( C / 30.6001 )
  C = I - ( GLI( 365.25 * B ) + 7.50001E-1 ) + 416
  B = GLI( ( I/365.25 ) + 8.02601E-1)
  I = GLI(D)
  D = DJ + 0.5
  FD = D - I
  IF FD가 1 이라면
  FD = 0
  I = I + 1
  IF I가 -115860 보다 작다면
  A = GLI((I/36524.25) + 9.9835726E-1)+14
  I = I + 1 + A - GLI(A/4)

 

가 됩니다.

 

위의 값을 이용한 CALDAY 구하는 알고리즘은 아래와 같습니다.

DY = C - GLI(30.6001 * G) + FD

만약에 G가 13.5보다 크다면
MN = G - 13

만약에 G가 13.5보다 작다면
MN = G -1

만약에 MN이 2.5보다 크다면
YR = B + 1899

만약에 MN이 2.5보다 작다면
YR = B + 1900

여기서 얻은 결과값 YR이 0이거나 음수라면
YR = YR-1

 

 

이제 다음 글에서 이것을 실제 동작 가능한 컴퓨터 코드로 만들어 보겠습니다.