조회 수 8321 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

3번째 글을 쓴지 벌써 2년이 넘게 지났습니다. 오랫동안 손을 놓고 있었지만, 올해 겨울이 지나기 전에 이 시리즈를 완결토록 하겠습니다.


4번째 글에서는 태양의 위치 계산에 관한 부분과 장동 계산에 대한 부분을 알아보겠습니다. 여기에는 모두 3개의 함수를 씁니다.


1. 태양의 위치 계산

해의 위치 계산에는 2개의 함수를 씁니다. 하나는 케플러 방정식 풀이, 하나는 해의 황경을 계산합니다.  계산 결과는 모두 황도좌표계를 기준으로 출력합니다. 


ANOMALY: 케플러 방정식 풀이
SUN: 태양의 위치 계산(황도좌표)


(1) ANOMALY(AM, EC, AT, AE)

ANOMALY 함수는 입력받은 2개의 궤도요소를 이용하여 케플러 방정식을 풀고, 그 결과를 출력하는 함수입니다. 입력받는 요소는 AM과 EC, 출력하는 요소는 AT와 AE입니다. 여기에서 AM은 평균근점이각(mean anomaly), EC는 이심률(eccentricity)이고, AT는 진근점이각(true anomaly), AE는 이심률이각(eccentric anomaly)는 입니다.

케플러 방정식은 해석적인 방법으로는 풀 수가 없으므로, 이 함수에서는 계산을 반복해서 오차를 줄여가는 식으로 진근점이각과 이심률이각을 찾아냅니다. 이 함수에서 오차는 0.000001라디안인데, 360도법으로 하면 0.21"입니다. 24절기 입기시각의 위치를 1분 이내의 정밀도로 계산하려면 태양의 위치는 2.5"미만의 오차범위 내로 계산하면 충분하다는 점을 고려한다면, 0.21"면 충분한 정밀도라고 볼 수 있습니다.

계산방법은 Astronomical Algorithms(J.Meeus)의 30장에 나오는 두 번째 방법(199쪽)을 이용하고 있습니다. 케플러 방정식에 관해서는 추후 설명토록 하겠습니다.


Private Sub ANOMALY(ByVal AM As Double, ByVal EC As Double, AT As Double, AE As Double)
  Dim A As Double, E1 As Double, E0 As Double
 
  AM = Rev(AM) * DegtoRad: E1 = AM '계산 초기값을 평균근점이각으로 대입
 
  Do  '이 부분이 케플러 방정식을 실제로 풀이하는 부분
    E0 = E1
    E1 = E0 + (AM + EC * Sin(E0) - E0) / (1 - EC * Cos(E0))
  Loop Until Abs(E1 - E0) < 0.000001
  AE = E1
 
  A = Sqr((1 + EC) / (1 - EC)) * Tan(AE / 2)
  AT = Rev(2 * Atn(A) * RadtoDeg)
  AE = Rev(AE * RadtoDeg)
End Sub



(2) SUN(JD, SL, SB, SR)

SUN 함수는 입력받은 시각의 태양의 위치를 계산하는 함수입니다. JD는 계산하고자 하는 날짜, 시각의 율리우스적일(지구시, 높은 정밀도가 필요하지 않다면 UTC로 입력할 수 있음)이고, SL은 지심황경, SB는 지심황위, SR은 전문단위(AU)로 나타낸 지심거리입니다. 계산은 궤도요소를 이용해서 케플러 방정식을 풀이하는 고전적인 방법을 사용하며, 계산 정밀도를 높이기 위하여 주요 섭동항 역시 포함되어 있습니다. 지심황위는 항상 0으로 출력합니다. 실제로 태양은 황도의 적도를 위도 방향으로 1.2" 이상 벗어나는 일이 없으므로, 이렇게 가정해도 충분한 정밀도를 보여주기 때문입니다.


Private Sub SUN(ByVal jd As Double, SL As Double, SB As Double, SR As Double)
  Dim T As Double, T2 As Double, A As Double, B As Double, L As Double, M1 As Double, EC As Double
  Dim A1 As Double, B1 As Double, C1 As Double, D1 As Double, E1 As Double, H1 As Double
  Dim D2 As Double, D3 As Double, AT As Double, AE As Double
 
  T = (jd - 2415020) / 36525: T2 = T * T
 
  A = 100.0021359 * T: B = 360 * (A - Int(A)) '궤도요소 계산
  L = 279.69668 + 0.0003025 * T2 + B
  A = 99.99736042 * T: B = 360 * (A - Int(A))
  M1 = 358.47583 - (0.00015 + 0.0000033 * T) * T2 + B
  EC = 0.01675104 - 0.0000418 * T - 0.000000126 * T2
 
  Call ANOMALY(M1, EC, AT, AE) '케플러 방정식 풀이
 
  A = 62.55209472 * T: B = 360 * (A - Int(A)) '섭동항 계산을 위한 인수 계산
  A1 = 153.23 + B
  A = 125.1041894 * T: B = 360 * (A - Int(A))
  B1 = 216.57 + B
  A = 91.56766028 * T: B = 360 * (A - Int(A))
  C1 = 312.69 + B
  A = 1236.853095 * T: B = 360 * (A - Int(A))
  D1 = 350.74 - 0.00144 * T2 + B
  E1 = 231.19 + 20.2 * T
  A = 183.1353208 * T: B = 360 * (A - Int(A))
  H1 = 353.4 + B
 
  D2 = 0.00134 * Cosd(A1) + 0.00154 * Cosd(B1) + 0.002 * Cosd(C1) '섭동(황위)
  D2 = D2 + 0.00179 * Sind(D1) + 0.00178 * Sind(E1)
 
  D3 = 0.00000543 * Sind(A1) + 0.00001575 * Sind(B1) '섭동(지심거리)
  D3 = D3 + 0.00001627 * Sind(C1) + 0.00003076 * Cosd(D1)
  D3 = D3 + 0.00000927 * Sind(H1)
 
  SL = Rev(AT + L - M1 + D2) '해의 황경 출력
  SR = 1.0000002 * (1 - EC * Cosd(AE)) + D3 '해의 지심거리 계산
  SB = 0 '황위는 0으로 가정
End Sub


함수 내부를 살펴보면, L은 태양의 평균황경, M1은 평균근점이각, EC는 이심률입니다. 섭동은 황경과 지심거리만 계산하는데, D2가 황경, D3가 지심거리에 대한 섭동입니다. 계산방법은 Astronomy with your personal computer(Peter Duffett-Smith, 제2판)에 있는 방법을 사용했습니다. 계산정밀도를 살펴보면 VSOP87과 비교했을 때 1900~2100년 사이에 황경의 평균오차는 3.46", 평균편차는 4.62", 최대오차는 20.20"이고, 거리의 최대오차는 0.000021AU입니다. 최대오차량으로 보아 입기시각 계산에 9분 정도의 오차가 발생할 수는 있지만, 실제로 이 기간동안의 음양력 계산에는 영향을 미치지 않습니다.


2. 장동

장동은 달이 지구 주위를 공전하면서 지구의 자전축이 조금씩 기울어지는 현상으로, 황경 방향으로는 ±17", 황도경사각은 ±9" 범위 내에서 영향을 줍니다. 입기시각 예측에 최대 7분 정도의 영향을 주는 요소이므로, 반드시 계산에 반영해야합니다. 장동 계산에는 단 하나의 함수만 사용하는데, 황경 방향의 요소만 계산합니다.


Nutation: 황경 방향의 장동 계산


(1) Nutation(JDE, dPsi)

Nutation 함수는 입력받은 시각의 황경방향 장동운동의 양을 계산합니다. 입력값인 JDE는 지구시로 나타낸 시각이고 출력값인 dPsi는 황경방향의 장동운동의 양입니다. 출력값의 단위는 360분법으로 나타낸 초(acsecond)입니다.


Private Sub Nutation(ByVal JDE As Double, dPsi As Double)
  Dim eps0 As Double
  Dim OM As Double, T As Double, L1 As Double, L2 As Double, T2 As Double
 
  T = (JDE - 2451545) / 36525
  T2 = T * T
  L1 = Rev(280.466457 + 36000.7698278 * T + 0.00030322 * T2 + 0.00000002 * T2 * T)
  L2 = Rev(218.3164477 + 481267.88123421 * T - 0.0015786 * T2 + T2 * T / 538841 - T2 * T2 / 65194000)
  OM = Rev(125.04452 - 1934.136261 * T + 0.0020708 * T2 + (T2 * T) / 450000) 
 
  dPsi = -17.2 * Sind(OM) - 1.32 * Sind(2 * L1) - 0.23 * Sind(2 * L2) + 0.21 * Sind(2 * OM)
End Sub


이 함수에 쓰인 계산식은 IAU1980에서 정의되어 있는 계산법에서 가장 중요한 몇 개의 항만 추려서 간단히 줄인 계산식으로 계산 정밀도는 황경방향으로 0.5" 이내입니다(입기시각 계산에서는 10초 이내의 오차요인으로 작용). 함수 내의 L1(태양의 평균황경), L2(달의 평균황경), OM(달의 승교점 경도)는 ELP-2000/82B에서 사용하는 식으로 고쳤습니다. 정밀도를 더 높이기 위한 조치이지만, 단순히 각 상수의 유효자릿수만 늘인 것으로 큰 의미는 없습니다.


다음 글에서는 해와 달의 절입시각/정삭시각 계산에 관한 내용을 다루도록 하겠습니다.

?

  1. 주요 시간체계 1

    현재 사용 중인 주요한 시간체계를 간단히 정리했습니다. 1. 세계시(UT, Universal Time) 경도 0도에서의 평균태양시로 과거에 쓰던 GMT(그리니치평균시)를 대체합니다. UT는 지구의 회전과 관련이 있는 시간체계입니다. 1) UT0 : 관측지에서 측정한 평균태양...
    Date2013.01.25 Category천문 계산 By창환 Views7231
    Read More
  2. No Image

    음력-양력 상호 변환 함수 모듈에 관한 간단한 설명 7

    음양력 변환 모듈에 대한 마지막 글입니다. 이번에는 양력을 음력으로 변환하는 방법에 대해 설명하겠습니다. 정확히는 율리우스적일로된 날짜를 음력으로 바꾸는 방법입니다. 음력을 계산하는 함수는 단 하나입니다. LuniSolarCal: 율리우스 적일을 음력으로 ...
    Date2013.01.18 Category천문 계산 By창환 Views5244
    Read More
  3. No Image

    음력-양력 상호 변환 함수 모듈에 관한 간단한 설명 6

    이번 글에서는 음력을 양력으로 변환하는 함수와 음양력 변환에 쓰는 보조함수에 대하여 설명하겠습니다. 양력을 음력으로 바꾸는 함수는 다소 긴 설명이 필요하므로 마지막 편에서 다루도록 하겠습니다. 이 글에서 다룰 함수는 다음 3개 입니다. Sol2Lun: 양...
    Date2013.01.17 Category천문 계산 By창환 Views11055
    Read More
  4. No Image

    음력-양력 상호 변환 함수 모듈에 관한 간단한 설명 5

    이번 편에서는 해의 절입시각 계산, 달의 정삭시각 계산에 사용하는 함수에 대해 알아보겠습니다. 입기시각은 중기 또는 절기에 이르는 순간의 시점, 정삭시각은 달이 삭에 이르는 순간의 시점입니다. 계산정확도가 1분 이내라면 대부분 정확하게 음양력을 계...
    Date2013.01.16 Category천문 계산 By창환 Views6786
    Read More
  5. No Image

    음력-양력 상호 변환 함수 모듈에 관한 간단한 설명 4

    3번째 글을 쓴지 벌써 2년이 넘게 지났습니다. 오랫동안 손을 놓고 있었지만, 올해 겨울이 지나기 전에 이 시리즈를 완결토록 하겠습니다. 4번째 글에서는 태양의 위치 계산에 관한 부분과 장동 계산에 대한 부분을 알아보겠습니다. 여기에는 모두 3개의 함수...
    Date2013.01.15 Category천문 계산 By창환 Views8321
    Read More
  6. No Image

    음력-양력 상호 변환 함수 모듈(1.03)

    음력-양력 상호 변환 함수 모듈 *배포 버전: 1.03 *제작자: 김창환(blueedu@hanmail.net) *홈페이지: http://blueedu.dothome.co.kr *제작일: 2013. 1. 13. *저작권: 이 프로그램의 저작권은 제작자에게 있습니다. *수정 사항 -1.01: 음양력 변환 코드의 오류...
    Date2013.01.13 Category천문 계산 By창환 Views6860
    Read More
  7. No Image

    음력-양력 상호 변환 함수 모듈(1.02)

    음력-양력 상호 변환 함수 모듈 *배포 버전: 1.02 *제작자: 김창환(blueedu@hanmail.net) *홈페이지: http://blueedu.dothome.co.kr *제작일: 2011. 9. 2. *저작권: 이 프로그램의 저작권은 제작자에게 있습니다. *수정 사항 -1.01: 음양력 변환 코드의 오류를...
    Date2011.09.02 Category천문 계산 By창환 Views6438
    Read More
  8. No Image

    음력-양력 상호 변환 함수 모듈에 관한 간단한 설명 3

    이번에는 지난 번에 이야기한 대로 시간 계산에 쓰이는 함수를 알아보겠습니다. 그러나 그 전에 이 모듈에 쓰이는 상수에 관해 설명할 필요가 있는 것 같습니다. 원래 지난 번 글에서 다루어야 했지만 깜빡했네요. 1. 상수이 모듈은 모두 8개의 상수를 사용합...
    Date2010.09.14 Category천문 계산 By창환 Views8599
    Read More
  9. No Image

    음력-양력 상호 변환 함수 모듈에 관한 간단한 설명 2

    아주 오래 쉬었습니다. 지난 번의 글에서 함수의 역할만 대강 설명을 했는데, 이번 글부터는 조금 더 자세히 설명토록 하겠습니다. 음양력 변환 함수에 대해 설명하기에 앞서, 이 함수가 작동하기 위해 필요한 부속 함수부터 설명하겠습니다. 이 글에서는 먼저...
    Date2010.09.06 Category천문 계산 By창환 Views8610
    Read More
  10. No Image

    음력-양력 상호 변환 함수 모듈에 관한 간단한 설명 1

    예전에 '음력-양력 상호 변환 함수 모듈'이라는 자료를 이곳에 올려 놓았습니다. 이 자료에는 음양력 변환을 할 수 있는 VB용 소스코드가 포함되어 있는데, 이 소스코드에는 주석이 거의 없어서 어떻게 음양력을 계산하는지는 알기가 어렵습니다. 앞으로 몇 편...
    Date2010.02.07 Category천문 계산 By창환 Views12624
    Read More
  11. No Image

    관측자중심좌표계에 관하여

    관측자중심좌표는 지구 표면 위의 관측자를 중심으로 나타낸 좌표계입니다. 이 좌표계는 관측자에게 실제로 관측되는 좌표를 알려줍니다. 관측자중심좌표를 구할 때에는 지구중심좌표에 아래 사항을 반영해주면 됩니다. 1) 항성-일주 광행차(diurnal aberratio...
    Date2010.01.29 Category천문 계산 By창환 Views9941
    Read More
  12. No Image

    지구중심좌표계에 관해서

    지구중심좌표계는 천체의 위치를 나타내는데 쓰는 좌표계 가운데 하나로, 지구의 중심을 기준으로 위치를 표시하는 좌표계입니다. 여기에서 지구의 중심은 지구 타원체의 중심입니다. 지구중심좌표계로 나타낸 위치에는 관측지에 따른 위치의 차이가 포함되어 ...
    Date2010.01.28 Category천문 계산 By창환 Views8974
    Read More
  13. 직교좌표와 구면좌표

    천문학에서는 보통 천체의 위치를 나타낸 때 구면좌표를 씁니다. 적경과 적위, 황경과 황위 또는 방위각과 고도 등과 같이 기준이 되는 점에 대한 각도를 써서 천체의 위치를 나타냅니다. 그런데 천문 계산을 할 때에는 구면좌표 대신 직교좌표를 쓰는 것이 더...
    Date2010.01.15 Category천문 계산 By창환 Views15892
    Read More
  14. 항성시와 세계시의 길이 비율

    평균 항성시와 평균 세계시(UT1)의 길이 비율은 세계시로 나타낸 하루의 길이를 항성시로 나타낸 하루의 길이로 나눈 비율입니다. 이 값은 지구가 얼마나 빠르게 자전하고 있는지를 나타내고 있으며, 이 값이 클수록 자전 속도가 느립니다. 기호로는 r'로 적습...
    Date2009.11.21 Category천문 계산 By창환 Views9185
    Read More
  15. 적도좌표↔지평좌표

    지평좌표계는 지상에서 관측한 천체의 방향을 고도(Altitude)와 방위각(Azimuth)으로 나타내는 좌표체계입니다. 고도는 지평선으로부터 얼마나 높이 떠올랐는지를 나타낸 각도이고 방위각은 천체의 방향을 북쪽을 기준으로 하여 표시한 각도입니다(간혹 남쪽을...
    Date2009.10.25 Category천문 계산 By창환 Views18841
    Read More
Board Pagination Prev 1 2 3 4 Next
/ 4
Powered by XE