천문 계산

[소스코드]해와 달의 위치 계산(간단한 방법)

by 창환 posted Aug 12, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

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

 해와 달의 위치 계산에 쓸 수 있는 함수입니다.
가까운 미래나 과거에 한해 비교적 낮은 정밀도로 해와 달의 위치를 계산할 수 있습니다.
비교적 낮은 정밀도라고 해도 실용상으로 쓰기에는 충분한 정확도를 가집니다(일식, 월식, 엄폐 현상의 계산에는 부적합할 수 있습니다).

입력은 율리우스 적일(UTC)로 받고 출력은 황도좌표계로 합니다. 거리의 출력 단위는 태양은 천문단위, 달은 km입니다.
(1천문단위는 149597870.691km이므로 km 단위로 바꾸고 싶다면 출력된 천문단위 값에 149597870.691을 곱하면 됩니다.)
분점은 입력한 날짜의 분점을 기준으로 합니다.

오차는 2000년 전후 100년 범위 내에서 다음과 같습니다(실제 위치와 계산 위치 사이의 편차입니다).
계산 가능한 시간 범위를 줄여도 오차 범위가 감소하지는 않습니다.

1)해
평균 오차: 0.34분(황경), 0.01분(황위), 3537.01km(거리)
최대 오차: 1.04분(황경), 0.02분(황위), 12027.15km(거리)
최소 오차: 0.00분(황경), 0.00분(황위), 0.01km(거리)

2)달
평균 오차: 7.75분(황경), 2.82분(황위), 282.04km(거리)
최대 오차: 31.60분(황경), 11.07분(황위), 1251.29km(거리)
최소 오차: 0.00분(황경), 0.00분(황위), 0.02km(거리)


함수는 입력값으로 계산할 천체의 종류(P, 0=해, 1=달)와 율리우스 적일값(JD)이고 출력값은 황경(Lamda), 황위(Beta), 거리(R) 입니다.
율리우스 적일은 세계표준시로 입력해야합니다.  

프로그램의 실행을 위해서는 아래에 올려놓은 천문계산용 수학함수 파일을 필요로 합니다.

[소스 코드]
Sub LBR_LOW(ByVal P As Byte, ByVal JD As Double, Lamda As Double, Beta As Double, R As Double)
  Dim N As Double, l As Double, g As Double, T As Double, E As Double
  
  N = JD - 2451545#
  If P = 0 Then  'sun
    l = 280.46 + 0.9856474 * N
    g = 357.528 + 0.9856003 * N
    Lamda = l + 1.915 * Sind(g) + 0.02 * Sind(2 * g)
    Beta = N / 36525
    E = 0.016708634 - 0.000042037 * Beta - 0.0000001267 * Beta * Beta
    Beta = 0
    R = 1.000001018 * (1 - E * E) / (1 + E * Cosd(g + Lamda - l))
    
  Else  'moon
    T = N / 36525
    l = 218.32 + 481267.883 * T + 6.29 * Sind(134.9 + 477198.85 * T) - 1.27 * Sind(259.2 - 413335.38 * T) _
      + 0.66 * Sind(235.7 + 890534.23 * T) + 0.21 * Sind(269.9 + 954397.7 * T) - 0.19 * Sind(357.5 + 35999.05) _
      - 0.11 * Sind(186.6 + 966404.05 * T)
    g = 5.13 * Sind(93.3 + 483202.03 * T) + 0.28 * Sind(228.2 + 960400.87 * T) - 0.28 * Sind(318.3 + 6003.18 * T) - 0.17 * Sind(217.6 - 407332.2 * T)
    N = 0.9508 + 0.0518 * Cosd(134.9 + 477198.85 * T) + 0.0095 * Cosd(259.2 - 413335.38 * T) _
      + 0.0078 * Cosd(235.7 + 890534.23 * T) + 0.0028 * Cosd(269.9 + 954397.7 * T)
    N = 1 / Sind(N)
    R = N * 6378.14
    Beta = g
    Lamda = l
  End If

TAG •