이 블로그를 시작한지도 3~4년이 되어 갑니다. 그동안 Flex, Flash, 천문, 스타플 관련해서 지속적으로 글을 써왔습니다. 지금 돌이켜보면 그렇게 열심히 써왔던 것들이 피가 되고 살이 되어 돌아온다는 것을 너무도 잘 느꼈습니다. 블로그를 통해 온라인에서 다양한 사람들과 교류를 할 수 있었고 미약하게 나마 좋은 사람들도 만나게 되었습니다. 또한 ACC, ACP라는 명함도 달게 되었고요.
이 블로그에는 되도록이면 Adobe 기술에 관련된 것 외에는 담지 않으려고 노력했습니다. 그래서 Flash 관련 내용이 대부분입니다. ACC가 된 이후로는 Adobe 기술에 대한 부분만 집중적으로 올렸었는데, 요즘에는 관련 글이 잘 써지지 않습니다. 왜냐하면 현재 주 업무가 아이폰 개발이다 보니 그렇네요. 그러다보니 블로그가 죽는다는 느낌이 듭니다. 또한 스스로 정리하는 것도 많이 줄어드는 것 같구요.
그래서 이제 좀더 포괄적으로 블로그를 운영하려고 합니다. 제가 최근에 공부하고 느끼는 모든 것을 왠만하면 다 담으려고 합니다. 관련기술, 천문, 스타플에 대한 것만 올리려고 합니다. 제가 좋아하는 드럼과 개인적인 일상 내용은 전부 배제할겁니다.
많은 지식이 있어서 이 블로그를 활용하는 것은 아닙니다. 오히려 너무도 부족함을 느끼기에 블로그를 더욱 쓰고 싶습니다. 지식 욕구를 채우고 또한 좋은 정보도 제공하며 많은 사람들을 만나는 통로를 이 블로그를 통해 만들어 갈 것입니다.
대부분 문의유형을 살펴보면 태양전지판을 효율적으로 사용하기 위해 태양의 방향에 따라 입사각이 90도가 이뤄지도록 구동하는 장치를 개발을 해야한다던가 수족관의 전등을 일출/일몰 시간에 맞게 자동으로 On/Off시켜줘야 한다는 뭐 아주 간단하면서 정확도가 그리 중요하지 않은 수준의 구현을 요구하는 것들이 대부분 입니다.
일전에 관련되어 문의를 받았지만 요즘에는 개인적으로 너무 바쁘고 여유가 없어서 설명을 드리고 싶지만 드릴 수 있는 시간조차 없었습니다. 몇주가 답변을 못드리다가 잠깐 짬을 내어 답변을 드렸지요.
웹상에서 찾아보면 일몰/일출 시간 소스는 얼마든지 있습니다. 그 방법도 엄청 많이 나와있지요. 단지 어찌 찾아야하는 것인지 있어도 어찌 활용해야하는지 모르시는 분들이 대부분이라 생각합니다. 그래서 여기에 이 부분에 대해 설명한 사이트들을 소개하고 마지막으로 웹에 공개된 C++소스에 주석처리한 것을 공유하겠습니다.
태양위치 계산은 정확도에 따라서 계산방법은 천차만별입니다. 그러므로 완벽한 정답은 없습니다. 상황에 맞게 쓰시면 됩니다.
C또는 C++로 만들어진 일출/일몰 소스입니다. http://www.sci.fi/~benefon/stuff.html
아래 붙여놓은 소스는 여기에서 구현한 C++소스를 주석처리 해놓은 것 입니다. 참고하시고 main()함수부터 천천히 보세요. 이것으로 근사적 일출/일몰 시간을 계산할 수 있습니다.
// C++ program calculating the sunrise and sunset for
// the current date and a fixed location(latitude,longitude)
// Jarmo Lammi 1999 - 2000
// Last update January 6th, 2000
#include <iostream.h>
#include <math.h>
#include <time.h>
extern double pi;
double tpi = 2 * pi;
double degs = 180.0/pi;
double rads = pi/180.0;
double L,g,daylen;
double SunDia = 0.53; // Sunradius degrees(지구에서 본 태양의 반지름각. 단위:도)
double AirRefr = 34.0/60.0; // athmospheric refraction degrees (지구대기 굴절각)//
// Get the days to J2000
// h is UT in decimal hours
// FNday only works between 1901 to 2099 - see Meeus chapter 7
// 이 함수는 J2000 1월 1일 12시 DT를 기준으로 날수(Day Number)를 구합니다. (Meeus의 책 챕터 7을 참고하세요)
// J2000에 대해서는 제 블로그 http://blog.jidolstar.com/487 를 참고하세요.
// 입력값은 년,월,일,시간(실수값)입니다.
double FNday (int y, int m, int d, float h) {
int luku = - 7 * (y + (m + 9)/12)/4 + 275*m/9 + d;
// type casting necessary on PC DOS and TClite to avoid overflow
luku+= (long int)y*367;
return (double)luku - 730531.5 + h/24.0;
};
// the function below returns an angle in the range
// 0 to 2*pi
//
// 들어온 값을 항상 0~2pi 값안으로 normalize시킵니다.
double FNrange (double x) {
double b = x / tpi;
double a = tpi * (b - (long)(b));
if (a < 0) a = tpi + a;
return a;
};
// Calculating the hourangle
// 시간각을 계산합니다.
double f0(double lat, double declin) {
double fo,dfo;
// Correction: different sign at S HS
dfo = rads*(0.5*SunDia + AirRefr); if (lat < 0.0) dfo = -dfo;
fo = tan(declin + dfo) * tan(lat*rads);
if (fo>0.99999) fo=1.0; // to avoid overflow //
fo = asin(fo) + pi/2.0;
return fo;
};
// Calculating the hourangle for twilight times
// 박명시간에 대한 시간각을 계산합니다.
double f1(double lat, double declin) {
double fi,df1;
// Correction: different sign at S HS
df1 = rads * 6.0; if (lat < 0.0) df1 = -df1;
fi = tan(declin + df1) * tan(lat*rads);
if (fi>0.99999) fi=1.0; // to avoid overflow //
fi = asin(fi) + pi/2.0;
return fi;
};
// Find the ecliptic longitude of the Sun
// 태양의 황경을 구합니다.
double FNsun (double d) {
// mean longitude of the Sun (태양의 평균 황경)
L = FNrange(280.461 * rads + .9856474 * rads * d);
// mean anomaly of the Sun (태양의 평균근점이각)
g = FNrange(357.528 * rads + .9856003 * rads * d);
// Ecliptic longitude of the Sun (태양의 황경계산)
return FNrange(L + 1.915 * rads * sin(g) + .02 * rads * sin(2 * g));
};
// Display decimal hours in hours and minutes
// 이것은 실수(Real Number)로 표현된 시간을 시:분으로 표기 하기 위한 겁니다.
void showhrmn(double dhr) {
int hr,mn;
hr=(int) dhr;
mn = (dhr - (double) hr)*60;
if (hr < 10) cout << '0';
cout << hr << ':';
if (mn < 10) cout << '0';
cout << mn;
};
// 메인함수입니다.
int main(void){
double y,m,day,h,latit,longit;
time_t sekunnit;
struct tm *p;
// get the date and time from the user
// read system date and extract the year
// 사용자의 시스템에서부터 날짜와 시간을 얻습니다.
/** First get time **/
time(&sekunnit);
/** Next get localtime **/
p=localtime(&sekunnit);
y = p->tm_year; //년
// this is Y2K compliant method
y+= 1900;
m = p->tm_mon + 1; //월
day = p->tm_mday; //일
h = 12; //낮 12시를 기준으로 계산합니다.
//관측장소의 경도(단위 degree),위도(단위 degree),타임존(단위시간) 값을 입력받습니다.
double tzone=2.0;
cout << "Input latitude, longitude and timezone and month\n";
cin >> latit;
cin >> longit;
cin >> tzone;
// testing
// m=6; day=10;
double d = FNday(y, m, day, h);
// Use FNsun to find the ecliptic longitude of the
// Sun
// 태양의 황경
double lambda = FNsun(d);
// Obliquity of the ecliptic (황도기울기 계산)
double obliq = 23.439 * rads - .0000004 * rads * d;
// Find the RA and DEC of the Sun (태양의 적경,적위 계산)
double alpha = atan2(cos(obliq) * sin(lambda), cos(lambda)); //태양의 적경
double delta = asin(sin(obliq) * sin(lambda)); //태양의 적위
// Find the Equation of Time
// in minutes
// Correction suggested by David Smith
// 균시차 계산
double LL = L - alpha;
if (L < pi) LL += tpi;
double equation = 1440.0 * (1.0 - LL / tpi);
double ha = f0(latit,delta);
double hb = f1(latit,delta);
double twx = hb - ha; // length of twilight in radians (라디안 단위 박명길이)
twx = 12.0*twx/pi; // length of twilight in hours (시간단위 박명길이)
cout << "ha=" << ha << " hb=" << hb << endl;
// Conversion of angle to hours and minutes (하루길이를 시간단위로 계산) //
daylen = degs*ha/7.5;
if (daylen<0.0001) {daylen = 0.0;}
// arctic winter //
double riset = 12.0 - 12.0 * ha/pi + tzone - longit/15.0 + equation/60.0; //뜨는시간
double settm = 12.0 + 12.0 * ha/pi + tzone - longit/15.0 + equation/60.0; //지는시간
double noont = riset + 12.0 * ha/pi; //정오 시간
//정오시에 태양의 고도(maximum altitude)
double altmax = 90.0 + delta * degs - latit;
// Correction for S HS suggested by David Smith
// to express altitude as degrees from the N horizon
if (latit < delta * degs) altmax = 180.0 - altmax;
double twam = riset - twx; // morning twilight begin 시민박명(아침)
double twpm = settm + twx; // evening twilight end 시민박명(저녁)
if (riset > 24.0) riset-= 24.0;
if (settm > 24.0) settm-= 24.0;
cout << "\n Sunrise and set\n";
cout << "===============\n";
cout.setf(ios::fixed);
cout.precision(0);
cout << " year : " << y << '\n'; //년
cout << " month : " << m << '\n'; //월
cout << " day : " << day << "\n\n"; //일
cout << "Days until Y2K : " << d << '\n'; //J2000을 기준으로 센 날수
cout.precision(2);
cout << "Latitude : " << latit << ", longitude: " << longit << '\n'; //관측자의 경도와 위도 출력
cout << "Timezone : " << tzone << "\n\n"; //타임존 출력 (한국은 UT+9h)
cout << "Declination : " << delta * degs << '\n'; //태양의 적위
cout << "Daylength : "; showhrmn(daylen); cout << " hours \n"; //하루길이
//시민박명(아침)
cout << "Civil twilight: ";
showhrmn(twam); cout << '\n';
//일출시간
cout << "Sunrise : "; //
showhrmn(riset); cout << '\n';
//정오때 태양 고도(Amendment by D. Smith)
cout << "Sun altitude at noontime ";
showhrmn(noont); cout << " = " << altmax << " degrees"
<< (latit>=0.0 ? " S" : " N") << endl;
//일몰시간
cout << "Sunset : ";
showhrmn(settm); cout << '\n';
//시민박명(저녁)
cout << "Civil twilight: ";
showhrmn(twpm); cout << '\n';
return 0;
}
이 사업은 언제 어디서나 누구나 인터넷을 통해 쉽게 밤하늘을 관측하고 정보를 얻을 수 있는 것을 목표로 최초 제작되었습니다.
2009년 6월 부터 12월까지 프로젝트가 진행되었으며 이를 위해 미국 우주망원경연구소의 디지털하늘탐사(Digitized Sky Survey, DSS) 데이터를 이용해 전천의 밤하늘 이미지를 가공했고 이것을 보여주기 위해 Adobe Flash 기술을 이용했습니다.
CDS는 프랑스의 스트라스부르 관측소 데이터 센터(Centre de Données astronomiques de Strasbourg)에서 제공하는 천체목록 데이타 서비스이다. 여기서는 VizieR(카탈로그), Simbad(천체대상), Aladin(Sky atlas)를 기본해서 다양한 천체목록 서비스를 하고 있다. 이들에 대한 가이드문서를 참고하면 이용하는데 도움이 된다.
CDS는 학술적 내용의 접근에 용이하도록 되어 있기 때문에 일반인들보다는 천문학자들에게 매우 유용하다. 본인은 이곳을 통해 다양한 천체정보를 종종 얻어오곤 한다.
CDS와 같은 서비스가 있는 이유는 천문학에서 다루는 천체들을 정리한 목록과 이름이 정말 많기 때문이다. 같은 대상이라 하더라도 그것들을 정리한 목록의 수가 많기 때문이다. 가령, 안드로메다은하만 하더라도 M31, NGC 224, Andromeda Galaxy, UGC 454, PGC 2557, LEDA 2557(참고:Wikipedia) 등 정말 많다. 이렇게 엄청 많은 목록이 존재할 수 밖에 없었던 이유는 천체목록이 생성된 시기에 따른 기술적 진보가 있었기 때문이다. 여전히 지금도 수많은 천체대상이 많이 발견되고 있기 때문에 이러한 목록은 없어지지 않고 항상 현존하게 된다.
이 개발자 코너를 통해 CDS에 제공하는 데이터를 다양한 형태로 가공해 다른 서비스를 만들 수 있다.
본인도 천체대상 검색이 필요했다. 사용자가 찾기 원하는 천체의 이름을 입력하면 그에 대한 정보를 얻어오는 기능이다. 그러나 엄청많은 이름의 천체목록을 다 검색하도록 만드는 것은 왠지 불가능해보인다. (언제 데이터베이스를 만들고 그들 의 연관 알고리즘을 언제 만들어!) CDS 개발자 코너에서 제공하고 있는 CDS XML Web Services는 이것을 가능하게 했다.
위 소스가 제대로 돌아가려면 php.ini 에 Soap가 동작할 수 있을 수 있게 모듈을 열어주어야 한다. 위와 같이 할 경우 M31 대상을 XML형태로 NED에서 찾는 것을 의미한다. XML 형태로 $temp에 저장되므로 별도로 XML 파서를 이용해야할 것이다. 한가지 예이긴 하지만 문서를 잘보면 사용방법을 익힐 수 있다. 읽어오는 방식도 XML뿐 아니라 HTML, String형태로도 반환하며 각종 옵션도 있으므로 꼼꼼히 챙겨보자. 단 deprecated로 표시된 것은 다음에 없어질 것이니 사용하지 말자. 위 형태 말고 다음처럼 쓸수도 있다.
싸이월드의 미니홈피는 수년간 국내에서 가장 영향력 있는 SNS(소셜 네트워크 서비스)로 자리매김했다. 하지만 나와 일촌만의 놀이터로 미니홈피는 굳어져 가고 있다는 평가를 받고 있다.
개방과 공유를 핵심가치로 여기는 web 2.0이 전 세계를 강타하는 현재, 개인의 콘텐츠는 사람과 사람을 연결하는 새로운 소통의 도구로 사용되고 있으며 기술적으로도 많은 발전이 일어났다.
블로그는 RSS(새로운 글이 작성될 경우 직접 방문하지 않더라도 자동으로 배달)를 기본 기능으로 가지고 있으며 해외의 대형 서비스들은 자사의 핵심기능을 오픈하고 타 서비스와의 공생을 선택했다.
국내의 대형 포털 서비스 역시 세계적 흐름에 발맞춰 자사의 서비스를 속속 개방하고 있으며 국내 블로그 서비스 중 가장 많은 사용자를 보유한 네이버 블로그 역시 점진적으로 서비스 오픈 정책을 펼쳐가고 있다.
최근 싸이월드의 이용률이 주춤하는 동안 그 뒤를 이을 새로운 서비스들이 속속 생겨나고 있다. 그 중 ‘스타플’ 서비스(http://starpl.com)에서는 미니홈피에서 자신의 글을 스타플로 옮길 수 있는 기능을 최근 오픈했다. 스타플은 사용자에게 실제로 존재하는 ‘별’을 개인공간으로 주고 자신의 별에 있는 타임라인에 일대기를 담을 수 있는 감성적인 서비스를 제공한다.
스타플의 한 관계자는 “스타플이 개인의 일대기를 담을 수 있는 타임라인을 제공하기 때문에 미니홈피의 글을 옮겨오고 싶다는 사용자 의견이 많았다”며 “그래서 미니홈피의 글을 나의 별에 쉽게 담을 수 있는 기능을 개발하게 됐다”고 기능 개발에 대한 이유를 설명했다.
이번 스타플에서 제공하는 ‘외부글 가져오기’ 기능은 사용자 미니홈피의 사진첩, 다이어리, 게시판 등의 거의 모든 글을 옮겨 올 수 있는 기능을 제공하며 자신의 타임라인에 시간순으로 담기게 되어 외부 서비스의 글을 이용해 손쉽게 자신의 일대기를 강화할 수 있게 됐다.
또한 스타플에서는 앞으로 다양한 블로그 서비스의 글도 담아올 수 있도록 기능을 확대하여 제공할 예정이다.
적도좌표계(Equatorial Coordinate System)는 항성(별)의 위치를 측정하는 가장 기본좌표계이다. 이 좌표계에서 별의 위치는 적경(Right Ascension)과 적위(Declination)값이 되며 이 좌표값의 기준점은 춘분점이 된다. 세차 및 장동과 같은 지구의 미세한 변화로 인해 이 춘분점은 계속 바뀌므로 필요에 따라 기준 시간(원기, Epoch)를 지정한다.
현대의 별자리는 1930년 국체천문연맹(IAU)에서 88개의 별자리로 지정되어 있다. 이 별자리는 서양기준 별자리이며 각 나라 및 문화권 마다 다양한 별자리가 있긴 하지만 통상 별자리라고 하면 이 88개 별자리를 지칭한다.
별자리는 단순히 별과 별을 이어주는 선으로 연결된 것만 지칭하지 않는다. 명확한 별자리 영역(Constellation Boundaries)이 존재한다. 이 영역은 1875년을 원기로 하는 춘분점을 기준으로 만들어졌으며 오늘날에도 사용하고 있다. 1875년 당시의 별자리 경계선은 적경,적위에 따라 아래 그림처럼 네모 반듯한 모습을 가진다. (투영방식은 정적도법을 이용했다.)
하지만 시간이 지날수록 지구의 운동으로 인해 춘분점이 변해감에 따라 1875년 당시의 별자리 영역은 조금씩 틀어지기 시작했다. 아래 그림은 2000년을 원기로 했을 경우 별자리 경계 영역을 보여주고 있다. 위 그림과 달리 왜곡되어 있는 모습을 쉽게 볼 수 있다.
그러므로 어떤 특정 별 또는 천체가 어떤 별자리에 속하는지 확인하기 위해서는 그에 상응하는 계산을 해줄 필요가 있다. 즉, 1875년 기준으로 해당 천체의 별자리가 지정된 것이므로 주어진 원기에 대한 천체의 별자리를 찾기 위해서는 별자리 영역을 당시에 지정된 영역으로 왜곡한다.
율리우스 적일(積日, Julian Date)을 계산하는 방법에 대해서 정리했다. 율리우스 적일은 천문계산의 기본이면서도 매우 중요한 개념이다.
율리우스 적일(Julian Date)은 다음과 같이 정의된다.
장소 : 영국 그리니치(Greenwich, 경도 0도) 기준
시점 : B.C. 4713년 1월 1월 세계시 12시
부터 세어진 날의 수
율리우스 적일(이하, JD)는 ‘어느 시점부터 몇 일째 되는 날’과 같이 날짜를 세는 방법이라고 생각하면 된다. 적일에서 ‘적(積)’자는 쌓을 적자이다. 즉 날짜를 쌓아간다는 의미이다. 한가지 더 고려해야할 것은 단순히 날짜만 세는 것이 아니라 소수점까지 포함한 시간까지 확장한다. 그러므로 JD는 날짜와 시간을 하나의 실수값으로 정의가 가능해진다.
JD가 천문학에서 많이 활용되는 이유는 천체의 운동을 기술하기 위해 시간을 편리하게 적용할 수 있기 때문이다. 일상 생활에서 사용하는 년월일,시분초는 인식하기 편하지만 계산을 위해서는 JD로 변환이 필요하게 된다.
JD은 Julian Days, Julian Day Numbers와 동일한 의미를 가지지만 Astronomical Algorithms 저자 Jean Meeus는 Julian Date대신 Julian Day로 사용할 것을 권면하고 있다. 왜냐하면 Date라는 용어는 달력에서 사용하는 년,월,일을 표기해야할 것 같은 느낌이 강하기 때문이라고 한다. 그러나 필자는 그러한 구분은 상관없다고 판단한다.
In many book we read “Julian Date” instead of “Julian Day”. A date consists of a year number, a month, adn a day of the month, in any calendar. For me, a Julian date is a date in the Julian calendar, just as a Gregorian date refers to the Gregorian calendar. The JD has nothing to do with the Julian calendar.
Astronomical Algorithms 2nd edition Chapter 7 에서 발췌
한가지 더 언급하자면 Jean Meeus도 지적했듯이 JD와 율리우스력(Julian Calendar), 그레고리력(Gregorian calendar)와 다르다는 점을 인식해야한다. JD는 날수(day number)이고 율리우스력이나 그레고리력은 달력이다. 이에 대해서는 다시 언급하겠다.
필자는 JDN(Julian Day Number)는 JD의 정수부분이라고 정의하겠다. 그러므로 1999년 1월 1일 0h UT는 JD로 2451179.5이고 JDN는 2451179이 된다.
시간(Time)
JD는 세계시(Universal Time, 이하 UT)를 기준으로 한다. JD와 UT와의 관계를 말하기에 앞서 잠깐 시간(Time)에 대해서 언급해 보는 것이 좋을 것 같다. 왜냐하면 시간의 변천 역사와 체계에 대한 이해가 선수되어야 천문 관련 계산에 도움이 되기 때문이다. 하지만 정확히 이해하기에는 쉽지 않다. 그래도 개념정도는 알아야 한다고 생각한다.
진태양시(True Solor Time)
태양일을 기준으로한 시간. 태양이 자오선상에 도달한 후 다시 도달할 때까지 걸리는 시간을 24시간으로 결정하는 시간체계이다. 지구의 궤도가 타원이고 자전주기가 변하기 때문에 매일매일 다른 시간체계를 가지게 된다. 과거 태양을 기반으로 시계를 만들었을때 사용했으며 오늘날에는 사용하지 않는다.
항성시(Sidereal Time)
별을 기준으로 하는 시간이다. 별이 자오선상에 도달한 후 다시 도달할 때까지 걸리는 시간으로 대략적으로 23시간 56분 4초 정도로 4분 정도 실제하루와 차이가 발생한다. 이렇게 차이가 발생하는 이유는 지구가 자전하면서도 공전하기 때문이다. 일상생활에서는 별보다는 태양이 우선이므로 항성시는 사용하지 않지만 천문계산을 위해서는 꼭 필요한 시간체계이다.
평균태양시(Mean Solar Time, 이하 MST)
1초는 평균태양일(Mean Solar Day)의 1/86400 간격으로 정의되었다. 평균이라는 단어가 생긴것은 실제 태양이 자오선에서 다시 자오선에 오는데 걸리는 시간이 계절에 따라 빠르게는 16분 느리게는 14분까지 주기가 변하기 때문에 실제 태양의 운동으로 재는 시간은 오차를 없애고자 사용한 것이다. 이러한 오차는 지구의 자전축의 기울기와 지구의 공전궤도가 타원형이라는 것에서 기인한다. 이 오차를 균시차(equation of time)이라 불리고 “균시차 = 진태양시 – 평균태양시” 관계를 가진다.
평균태양일은 지구의 자전속도가 느려지는 것을 보정해주지 못한다.
MST는 1956년 이전까지 사용했던 시간이다.
세계시(Universal Time, 이하 UT)
UT는 전세계적으로 통용될 수 있는 시간의 필요성에 따라 만들어진 시간체계이다. UT는 그리니치(경오 0도)상에서 자오선에 대한 평균태양시(MST)이다. 그리니치 평균태양시(Greenwich Mean Time, 이하 GMT)와 UT는 정확하게 같지 않다. 원래 GMT는 자정이 아닌 정오에 시작하도록 만든 시간이다. 1925년 1월 1일에 GMT를 12시간 앞당겨 자정으로 시작하는 것을 제정했고 1928년 이전 GMT와 새로운 GMT의 용어의 혼란을 피하기 위해 만들어진 것이 바로 UT이다. 오늘날에는 GMT와 UT는 같은 의미로 통용되지만 천문학에서는 사용하지 않는다.
UT는 10분의 수초에 정밀도를 요하는 경우 UT0, UT1, UT2로 세부적으로 구분하여 사용하게 된다.
UT0 : 가장 기본적인 UT로 별의 자오선 통과를 광학적으로 측정하여 구한 UT. 현대적인 방법으로는 GPS를 이용한다. 이것은 실제 UT로 통용되지는 않는다.
UT1 : UT0를 보정한 UT로 지구의 자전축의 운동(극운동) 때문에 생기는 자오선의 변화에 대한 보정을 가한 UT이다. 일반적으로 UT라고 하면 UT1을 의미한다. 오늘날 UT라고 하면 UT1을 의미한다.
UT2 : UT1에서 지구의 계절별 자전율 변화에 의해서 일어나는 작은 불규칙성 보정한 UT. UT2는 10-7의 상대오차를 가진다. UT1과 UT2의 관계는 다음과 같다.
UT2 - UT1 = 0.022 * sin(2*pi*t) - 0.017 * cos(2*pi*t)
- 0.007 * sin(4*pi*t) + 0.006 * cos(4*pi*t)
t = 2000.0 + (MJD - 51544.03) / 365.2422
pi = 3.14159265...여기서 UT1은 초단위이고 t는 Besselian Date값, 그리고 MJD는 Modified Julian Date(Julian Date-2400000.5)이다.
UT를 다른지역의 시간대로 변경할 수 있다. 가령 한국표준시(Korean Standard Time, 이하 KST)는 UT보다 9h이 빠르다. 그러므로 다음과 같은 관계가 성립한다.
UT = KST – 9h
표준시(Standard Time)은 일상적으로 사용할 수 있도록 시간대를 형성해주는 반면 지방시(Local Time)는 경도에 따라서 달라진다.
동적시(Dynamical Time,이하 DT )
DT의 역사는 역표시(Ephemeris Time, 이하 ET)로 부터 시작한다.
ET는 1900년 1월 0일 12시 태양년의 1/31556925.9747을 1초로 삼는 시간체계이다. 그러므로 이 ET는 매우 정확한 비율로 계산되는 시간체계가 된다.
MST기반인 UT의 경우 평균값을 이용하기 때문에 달과 태양에 의해 일어나는 조석마찰로 인해 느려지는 지구의 자전주기와 유동성을 갖고 있는 지구 내부 물질의 움직임에 의해 자전의 속도가 달라지는 현상에 의해 지구를 기준으로하는 실제 시간은 느려진다는 것을 발견하게 되었다. 아래는 1973년부터 2008년까지 지구 자전의 주기의 변화를 보여주고 있다.
1956년에 국제도량형위원회(CIPM)은 지구자전대신 지구의 공전을 기초로 하는 ET를 시간의 표준으로 결정하게 된다. 이것은 달, 행성, 우주의 다른 태양계 천체들의 운동에 대해 기술할때 사용된다.
지구 공전으로 기준삼은 ET는 지구 자전으로 기준삼는 UT와 시간차이가 멀어지기 시작했다. 1902년 이후 2000년에 UT와 ET는 63초 이상 차이가 벌어졌다.
ET는 1960년에서 1983년까지 사용했다. 지구공전기반의 ET는 1984년에 원자시계 기반인 지구동적시(Terrestial Dynamic Time:TDT)로 대체되었다. 더불어 태양계의 질량중심과 관련된 Barycentric Dynamical Time(TDB)도 사용되었다. TDB와 TDT의 차이점은 태양계의 질량중심을 기준으로 한다는 것 외에는 같으며 0.0017초 차이 정도난다. TDT는 2001년에 지구시(Terrestial Time,TT)로 용어가 변경된다. 일반적으로 TT(TDT)와 TDB는 거의 차이가 없기 때문에 구분하지 않지만 20 microseconds보다 더 작은 정확도를 가지는 행성의 위치를 계산해야하는 경우 TDB를 사용한다.
참고로 TDT는 TAI(국제원자시)와 아래와 같은 관계가 성립된다.
TDT = TAI + 32.184 = UTC + (윤초수, 2009년까지 34초) + 32.184
TDB는 아래와 같은 공식이 성립한다.
TDB = TDT + 0.001658 sin( g ) + 0.000014 sin( 2g ) seconds
g = 357.53 + 0.9856003 ( JD - 2451545.0 ) degrees
JD는 Julian Date이고, g는 지구의 mean anomaly이다.
만약 짧은 시간의 정확성이 중요하다면 UT와 ET의 차이값을 알아야한다. 이값은 ΔT로 표기되며 다음과 같은 공식을 가진다.
ΔT = ET – UT (1984년 이전), TDT – UT(1984년~2000년), TT - UT(2001년부터)
지구의 운동 기반이 아닌 세슘원자시계를 기반으로한 국제표준이다. TAI에서 1초는 세슘원자가 2개의 초미세구조 사이에서 전이할때 복사 또는 흡수하는 전기에너지 주기의 9,192,631,770배와 동일한 시간으로 정의한다. TAI의 원점은 1958년 1월 1일 0h UT2로 한다. TAI는 원자시계를 기반으로 하므로 매우 정밀하다. 실생활에는 쓰이는 시간체계는 아니지만 과학적 용도로 쓰기에 적합하다. 실생활에 사용하는 시간은 아래에서 설명하는 세계협정시(UTC)이다.
1987년 12월 31일까지 국제시보국(BIH)에서 TAI, UTC, 지구자전요소 계산 업무를 했고, 1988년 1월 1일부터는 국제도량형국(BIPM)의 Time Section에서 TAI, UTC 결정업무를 맞고 지구자전요소 결정 및 윤초의 결정 통보는 국제지구자전연구부(IERS)에서 담당하게 되었다.
오늘날에는 일상생활에 UTC을 국제표준으로 삼고 있다. UTC는 TAI기반으로 UT1과 0.9초 내로 차이가 나도록 윤초(leap second) 개념을 도입한 것이다. 즉 TAI는 현재 가장 정확한 시간체계이고 UTC는 그 정확한 시간에 지구자전도 고려한 시간인 것이다.
윤초는 1972년부터 국제시보국(BIH)에서 최초로 도입했고 1988년 1월 1일 부터는 국제지구자전연구부(IERS)에서 지구자전요소의 결정 및 윤초의 결정과 통보업무를 담당하고 있다.
매월 말에 윤초를 넣을 수 있지만 6월 말, 12월 말에 더하거나 빼는 것만으로도 충분하다.
GPS는 1980년 6월 1일 UTC가 TAI와 19초 차이나는 시점부터 적용했다. TAI와 같은 원자시계를 기반으로 하며 UTC처럼 윤초를 더하지 않는다.
시간 관계 (Time Relationships)
위 그림은 지금까지 설명한 시간관계를 하나의 그래프로 보여주고 있다.
Julian Date(JD)와 Julian Ephemeris Date(JDE)
JD는 UT를 기반으로 한다고 언급했었다. 하지만 JDE는 ET(TT,TDT)를 기반으로 한다. UT는 지구의 운동에 따라 계산되어 실제로는 명확하지 않지만 일상생활에서는 가장 적합하다. 하지만 ET의 경우 원자시계를 기반으로 한다. 앞서 ΔT = TDT(or ET) – UT 를 언급했다. 실제로 2015년에는 +80초가 된다. 그러므로 JD와 JDE는 구분되어 생각해야한다.
1977년 4월 26.4일 UT = JD 2443259.9 = JD 2443259.9 UT
1977년 4월 26.4일 ET = JDE 2443259.9 = JD 2443259.9 ET
위는 다른 값이라는 것을 항상 생각하자.
그레고리력(Gregorian Calendar)과 율리우스력(Julian Calendar)
율리우스력은 해당 년도가 4로 나누어 떨어지는 경우 365일이 아닌 366일을 1년으로 삼는 달력이다. 이렇게 하루를 포함하는 해를 윤년(Leap Year)이라고 한다. 이런 윤년이 발생하는 이유는 일년이 딱 365일이 아니기 때문이다. 율리우스력에서 1년은 365.25일이다. 그러므로 4년이 흐르면 1일이 차이가 나게 되어 있다. 이것을 보정하기 위해 만든 것이 윤년인 것이다.
가령, 900년 1236년의 경우 4로 나눠어지므로 윤년이고 750년 1429년은 보통해이다.
율리우스력은 1582년 10월 4일까지 사용되어졌다.
그레고리력은 기본적으로 율리우스력과 비슷하게 4년마다 윤년이 있다. 대신 4로 나눠떨어지지만 400으로 나눠떨어지지 않는 해는 윤년이 아닌 보통해로 생각한다. 이 달력은 오늘날 사용하고 있다.
가령, 1700년, 1800년, 1900년은 4로 나눠지지만 400으로 나눠지지 않으므로 보통해이다. 반면 1600년, 2000년, 2400년은 4로 나눠지면서 400으로 나눠 떨어지므로 윤년이 된다.
그레고리력은 율리우스력과 다르게 1년을 365.2425일로 본다.
그레고리력은 1582년 10월 15일부터 사용하기 시작했다. 여기서 율리우스력의 마지막 날과 그레고리력의 시작일에 비어 있다. 1582년 10월 5일에 그레고리력을 사용하기 시작하면서 그 다음날을 1582년 10월 15일로 만들었기 때문이다. 이렇게 된데에는 율리우스력이 역법상 오차가 있었기 때문인데, 당시 춘분점이 3월 21일이어야하는데 율리우스력에 의하면 3월 11일로 무려 10일이나 차이가 났기 때문이다. 율리우스력이 1년을 365.25로 해서 그것이 누적되어 원래 시간보다 더 빨리 계수되는 달력이였기 때문에 이것을 극복하고자 1년을 더 정확한 365.2425일로 수정하고 이에 맞는 그레고리력을 사용하게 된 것이다.
한국의 경우 조선시대에 1895년 을미개혁 때인 양력 1896년 1월 1일(건양 원년)부터 그레고리력을 처음 사용하게 되었다.
날짜로 부터 Julian Date 계산
JD는 앞서 설명한대로 4713년 B.C.부터 계수한 날 수이다. JD는 또한 경도 0도를 기준으로하는 UT를 기반으로 하기 때문에 천문계산에 시간의 척도로서 적합하다. “언제 목성이 어디에 있었나”를 질문할 때 “언제”가 명확하기 때문이다.
UT에 해당하는 날짜가 주어졌을 때 JD를 계산하는 방법에 대해서 생각해보자.
Y는 해당년도, M는 월(1월=1,2월=2), D는 해당 월의 날짜이다. D는 시간값도 포함한 소수값으로 생각하자. 가령 3일 12시 UT라면 D=3.5이다.
M>2인 경우 Y,M은 변경하지 않는다.
M = 1 또는 2인 경우 Y=Y-1, M=M+12로 계산한다.
그레고리력(Gregorian Calendar)의 경우 아래처럼 계산한다.
A = INT(Y/100), B = 2 – A + INT(A/4)
여기서 INT는 ()안에 들어간 값을 넘지않는 가장 큰 정수이다.
율리우스력(Julian Calendar)의 경우 B=0이다.
JD는 다음과 같이 계산된다.
JD = INT(365.25(Y+4716)) + INT(30.6001(M+1)) + D + B – 1524.5
여기서 30.6001은 정확히는 30.6을 써야한다. 하지만 컴퓨터 계산시 10.6이여 하는데 10.599999999 이런식으로 표현되는 경우가 발생하면 INT(10.6)과 INT(10.5999..)의 결과가 달라진다. 이 문제 대해 대처하기 위해 30.6001을 사용한 것이다. 이러한 에러를 Round-off Error라고 불린다.
계산시 중요한 점은 B.C.(기원전)에 대한 처리이다. 1년 B.C. 다음 해는 1년 A.D.이다. 0년 A.D.가 없기 때문에 이것은 계산하는 사람으로 하여금 혼동을 주게 된다. 그래서 위 계산식에서 Y값을 정할때 B.C.값의 경우 –(B.C.값)+1 로 처리한다. 가령, 585 B.C.는 -584이다. 참고로 –582 B.C. 처럼 B.C.에 –를 사용하지 말자. 잘못된 표기이다.
그러므로 기원전 4713년 1월 1일 12UT부터 JD가 시작하므로 Y=-4712, M=1, D=1.5 를 계산식에 넣으면 값은 0이 떨어지게 되어 있다.
만약 1582년 10월 5일부터 1582년 10월 14일에 해당하는 값을 가지고 계산하려는 경우는 막아야한다. 앞서 설명했지만 율리우스력은 1582년 10월 4일까지이고 그레고리력은 1582년 10월 15일 부터이여서 그 사이 날짜는 실제로 없기 때문이다.
만약 주어진 해의 1월 0.0일(=이전해 12월 31.0일)의 JD를 계산하려면 다음식을 이용한다. 단 그레고리력일때만 된다.
Y = year – 1
A = INT( Y / 100 )
JD0 = INT(365.25Y) – A + INT(A/4) + 1721424.5
위 조건에서 1901년부터 2099년까지만 고려한다면 다음식을 사용한다.
JD0 = 1721409.5 + INT(365.25 x (year-1) )
Julian Date로부터 날짜 계산
여기서 언급하는 JD가 음수값일때는 적용할 수 없다.
JD + 0.5의 정수부분은 Z, 소수점 이하 부분은 F로 지정한다.
A값 계산
Z < 2299161이면 A=Z 이다.
Z >= 2299161 이면 다음식을 적용
alpha = INT( (Z – 1867216.25)/36524.25)
A = Z + 1 + alpha – INt( alpha/4 )
B,C,D,E 결정
B = A + 1524
C = INT( (B –122.1) / 365.25 )
D = INT( 365.25 C )
E = INT( (B – D)/30.6001 )
일(day) 계산
day = B – D – INT(30.6001 E ) + F
월(month) 계산
E < 14일 경우 month = E – 1
E = 14 또는 15일 경우 month = E - 13
년(year) 계산
month>2일 경우 year = C-4716
month=1,2일 경우 year = C-4715
위에서 30.6001대신 30.6을 쓰면 컴퓨터 계산이 오류가 있을 수 있다. day의 소수점 이하값은 시간을 뜻한다. 소수점값만 취해서 24를 곱하면 시간이 되겠다.
Julian Date와 날짜와의 관계표
아래 관계값은 계산시 비교해볼 수 있도록 하기 위해 적는다.
2000년 1월 1.5일 = JD 2451545.0
1999년 1월 1.0일 = JD 2451179.5
1988년 1월 27.0일 = JD 2447187.5
1600년 12월 31.0일 = JD 2305812.5
837년 4월 10.3일 = JD 2026871.8
-123년 12월 31.0일 = JD 1676496.5
-1001년 8월 17.9일 = JD 1355671.4
-4712년 1월 1.5일 = JD 0.0
Modified Julian Date(MJD)
JD은 너무 큰 숫자이다. 또한 JD는 하루의 시작이 정오이다. 그래서 1858년 11월 17일 0h UT를 기준으로 하는 JD를 따로 지정했는데 MJD이다.
MJD는 다음과 같이 계산한다.
MJD = JD – 2400000.5
시간간격 계산
헬리혜성은 근일점(perihelion)을 1910년 4월 20일에 도달한 후 1986년 2월 9일에 다시 도달했다. 이 날짜동안의 날수를 어떻게 계산할 것인가? JD를 이용하면 아주 쉽게 계산이 가능하다.
1910년 4월 20.0일 = JD 2418781.5
1986년 2월 9.0일 = JD 2446470.5
차이는 27689일이다.
요일 계산하기
1954년 6월 30일 무슨 요일일까? 계산이 어려울 것 같지만 JD를 이용하면 매우 쉽게 계산이 가능해진다. JD는 월요일부터 시작한다. 단순하게 아래 계산식대로 하면 요일을 쉽게 계산할 수 있다.
(JD + 1.5) % 7 (%은 나머지를 계산하는 식이다.)
결과값이 0이면 일요일, 1이면 월요일 6이면 토요일이된다.
1954년 6월 30일에 대응하는 JD는 2434923.5이다. 1.5를 더하면 2434925이므로 7로 나누면 3이 나온다. 결과는 수요일이다.
오늘날 우리가 일상생활에서 사용하는 시간체계는 UTC(Coordinated Universal Time; 세계협정시)이다. 이는 원자시계를 근간으로 하지만 더불어 지구의 운동까지 고려한 UT(Universal Time;세계시)와 0.9초 차이가 안나도록 윤초(leap year)를 매년 6월 말 및 12월 말에 넣어주는 방식을 택하고 있다. 즉, UTC는 원자시계 + 지구운동을 같이 고려하고 있는 것이다. 원자시계를 기반으로하는 시간체계는 TAI(International Atomic Time, 국제원자시)이다. 이 시간은 2009년 이래로 UTC와 +64초 차이가 나게 되었다. TAI는 매우 정교한 시간을 만들어주기 때문에 느려지거나 빨라지지 않는다. 하지만 UTC는 UT와의 차이를 좁혀주므로 지구의 운동에 민감하게 된다. UTC와 UT는 거의 구별을 안하지만 엄밀히 말하면 다르다. UT는 지구자전에 의해 연속적으로 변하는 값이지만 UTC는 UT와 0.9초 벌어지지 않기 위해 불연속적으로 변한다.
천문계산을 하는데 있어서 일상에서 사용하는 시간과 과학을 목적으로하는 시간체계는 차이가 있다. 일상생활에 사용하는 UT나 UTC는 과학계산에 적합하지 않다. 왜냐하면 균일한 시간이 아니기 때문이다. TAI를 사용하기 이전에 시간의 균일하지 않은 문제를 해결하기 위해 ET(Ephemeris Time,역표시), TDT(Terrestiral Dynamical Time), DT(Dynamical Time)등을 만들게 되었다.
식(eclipse, 일식/월식등)을 예견하기 위해 태양, 달의 위치는 Terrestiral Dynamical Time(DT)기반으로 계산된다. 왜냐하면 DT는 균일한 시간체계이기 때문이다. 우리가 평소에 쓰는 것은 UTC이고 이것은 UT와 차이없도록 만들어진다. 이는 지구의 운동에 관련된 시간체계이기 때문에 균일한 시간이 아니다. 그래서 일상생활의 시간에 어떤 천문 현상을 예측하기 위해 항상 UT와 DT의 차이값을 알아야만 한다. 이 차이값을 delta-T(ΔT)라고 하며 다음과 같은 관계를 가진다.
ΔT = DT – UT = 32.184 + (TAI-UTC) - (UT1-UTC)
이 식을 보면 알겠지만 ΔT는 DT와 UT의 차이면서 TAI, UTC, UT와 관계가 있다는 것을 알 수 있다. 즉 DT를 몰라도 UT, TAI, UTC만 알면 충분히 계산해 낼 수 있는 시간이다. UT의 경우 지구의 운동을 측정하면 되고 TAI는 원자시계이므로 이미 알고 있는 값이다. 또한 UTC도 윤초를 더한 날이 언제인지 알고 있으므로 충분히 알아낼 수 있는 값이다. 하지만 이런 관계는 현대시간에서만 이런 계산이 가능하다. 일반적으로 ΔT를 계산하는데는 과거, 현재, 미래까지 통용할 수 있는 식을 원한다. 그럼 먼저 과거의 ΔT는 어떻게 구할까?
과거의 ΔT는 역사적 기록으로부터 추론된다. 일찍이 우리나라를 비롯한 유럽, 중동, 중국등의 나라에서는 수십건의 식(eclipse)을 관측하고 기록해왔다. 역사적 기록은 낮은 정확성에도 불구하고 과거 ΔT를 계산하는데 중요한 자료로 사용된다. 1609년부터는 망원경을 이용한 천체관측을 시작하게 되어 달의 별을 가림현상(달의 엄폐)등을 관측하여 전보다 높은 정확도를 가진 관측자료를 만들게 되어 ΔT의 오차를 줄일 수 있게 되었다.
현대에는 지구 운동과 독립적인 원자시계 및 퀘이사 전파측정으로 거의 완벽한 ΔT를 계산할 수 있게 되었다. 하지만 지구의 운동은 어떻게 변할지 예상하기 힘들다. 1965년부터 1980년까지 ΔT는 평균적으로 1년에 0.99초씩 증가했다. 또 1985년부터 2000년까지 ΔT는 평균적으로 1년에 0.63초씩 증가했다. 2000년부터 2005년까지는 단지 0.18초 증가했다. 이렇게 불규칙하게 변하는 ΔT이기 때문에 미래의 ΔT의 정확한 예측은 이론적으로는 힘들다. 대신 달에 의한 조수차로 지구의 자전 주기가 길어지는 것은 예상이 가능하다. 예측 계산에 따르면 2010년에는 ΔT는 +67초, 2050년에는 +93초, 2100년에는 203초, 그리고 2200년에는 442초가 될 것이라 예상할 수 있다.
ΔT를 계산하는 방법은 매우 다양하다. 본인은 이 ΔT를 계산하기 위해 NASA(미국항공우주국)에서 제공하는 “다항식을 이용한 ΔT 계산”을 이용해서 B.C. 2000년 부터 A.D. 3000년까지 ΔT를 계산해보았다.
다음 프로그램에서 버튼을 누르면 ΔT를 계산해서 출력해준다. 누르고 반응이 없더라도 기다리면 출력된다.
여기서 사용한 식은 Morrison과 Setphenson[2004]가 연구결과로 만든 것으로 달의 평균운동으로 인해 결정된 조석항(the secular tidal term in the mean motion of the moon)을 -26 arcsec/cy^2로 가정하고 계산한 것이다. 하지만 ELP-2000/82 lunar ephemeris에서 사용하는 달의 식변화는 이 값을 -25.858 arcsec/cy^2((Chapront, Chapront-Touzé, and Francou,2002)으로 계산했다. 그러므로 필요한 경우 최종 계산된 결과값인 ΔT에 아래와 같은 작은 보정값 c를 구해 더해줄 필요가 있다. 참고로 cy는Julian century를 뜻한다.
c = - 0.91072 * (ndot + 26.0 ) * t^2
t = (year-1955)/100
ndot=-25.858
위 보정값 c를 아래처럼 ΔT에 더한다.
보정된 ΔT = ΔT + c
위 ndot는 다른 값을 넣을 수 있다. 필요에 따라서 보정값을 조정하면 되겠다.
앞서 설명했지만 ΔT는 정확하게 구할 수 있는 값이 아니다. 연구하는 사람마다 다르게 나오며 시간이 지날 수록 지구의 운동을 측정을 통해 계속 보정하여 다른 식으로 바뀌어질 수 있다. 그때는 이 식을 사용하는 사람이 알아서 기존에 사용하던 식을 대체할 필요가 있을 것이다.
세차운동(歲差運動, Precession)은 일반적으로 강체에 돌림힘(Torque)이 작용할 때, 회전하는 물체의 축이 어떤 부동축의 둘레를 회전하는 현상을 말한다. 천문학에서 말하는 세차운동은 지구의 자전축이 불변인 황도면의 축의 둘레를 2만 5800년 주기로 회전하는 운동을 말한다. 이 현상은 지구에 작용하는 달, 태양의 중력과 지구가 타원체라는 것에서부터 기인한다.
천문 계산을 하는데 있어서 세차를 고려해야 과거,미래의 천체위치를 제대로 예측할 수 있다. 왜냐하면 세차운동으로 인해 지구 자전축이 변한다는 것은 천체 위치의 기준점인 춘분점(Vernal Equinox)의 위치도 변한다는 것을 의미하기 때문이다.
여기서는 적도좌표계(Equatorial Coordinate System)와 황도좌표계(Ecliptic Coordinate System)에서 세차운동 계산방법을 학습하는 것을 주 목표로 한다. 세차운동의 공식 유도 및 사용되는 각종 다항식이 어떻게 만들어졌는지 알아내는 과정은 생략한다.
이 글의 참고 서적은 Jean Meeus의 Astronomical Algorithms 2nd임을 밝혀둔다. 하지만 이 책에서 소개한 대로만 하지 않으며 더 효과적으로 계산하는 방법도 소개하겠다.
이 글은 세차운동 계산시 정밀한 방법(Rigorous Method)을 이용한다. 낮은 정밀도를 가지는 방법은 책을 참고하길 바란다.
Julian Century
1 Julian Century는 100 Julian Year와 같다. Julian Year는 86000 SI 초를 기반으로하는 365.25일을 1로 측정하는 단위이다. Julian Century는 Julian Year의 100배 이므로 36525일을 1로 측정하는 단위이다. 보통 J2000.0 = JDE 2451545.0 = 2000년 1월 1일 12h DT를 0으로 시작하게 된다. 여기서 JDE는 Julian Ephemeris Date, DT는 Dynamic Time을 의미한다.
그러므로 Julian Date(JD)로부터 Julian Century는 다음과 같이 계산한다.
T = (JD0 – J2000) / 36525
세차운동의 경우 어떤 시작원기(the initial epoch)부터 마지막 원기(the final epoch)까지의 세차운동값을 계산해야한다. 그러므로 시작원기와 마지막원기의 Julian Century차이는 다음과 같다.
t = (JD – JD0) / 36525
T, t에서 JD0는 시작원기, JD는 마지막 원기를 의미한다.
적도좌표계에서 세차운동적용 (일반 공식 이용)
Meeus의 책에 보면 다음과 같은 적도좌표계에서 세차운동을 계산하기 위한 수치적 표현공식이 적혀있다.
ζ = (2306”.2181 + 1”.39656T – 0”.000139 T2 ) t
+ (0”.30188 – 0”.000344T)t2 + 0”.017998 t3
이 식은 IAU(International Astronomical Union, 1976)에서 지정한 값으로 관측을 통해 얻어지는 데이타로 만들어지는 식이다. 참고로 IAU에서는 IAU2006 세차모델을 사용하도록 권하고 있고 미해군천문대에서는 2009년부터 천문역서에 적용하고 있다.(참고 : IAU2006 세차모델)
시작원기의 적경,적위를 (α0, δ0)라고 하고 세차운동이 적용된 마지막원기의 적경,적위를 (α, δ)로 한다면 위 수치적 표현공식을 이용해 다음과 같이 (α, δ)를 계산할 수 있다. 이 식을 유도하는 과정은 구면천문학에 관련된 책을 참고하기 바란다.
이 식만으로도 정확한 계산을 할 수 있다. 그러나 컴퓨터 프로그램을 이용하여 계산을 한다면 이 식은 매우 비효율적인 식이 된다. 가령, 수천, 수만개의 별이 있다고 하자. 그 별들은 어떤 시작원기를 가지는 각각 다른 α0, δ0값을 가지고 있을 것이다. 이들 α0, δ0을 세차운동이 적용된 새로운 α, δ를 계산하기 위해 일일히 cos, sin을 계산한다. 컴퓨터 프로그램을 한 사람은 알겠지만 cos, sin은 컴퓨터의 많은 자원을 소비하는 급수형태의 계산식이다. cos, sin을 너무 많이 쓰면 계산의 효율이 급격하게 떨어져서 1분이면 도출할 수 있는 계산을 1시간~2시간 이상식 소비할 수도 있게 된다.
컴퓨터 프로그램을 이용한 계산을 하려면 되도록이면 cos, sin과 같이 매우 비싼 자원을 소비하는 함수 사용을 지양하도록 해야한다. 그래야 빠른 계산을 할 수 있기 때문이다.
적도좌표계에서 세차운동적용 ( 변환행렬이용 )
앞서 세차운동이 적용된 새로운 α, δ를 계산하는 식은 한개의 천체 위치를 계산할 때마다 α0, δ0이 포함된 cos, sin을 계산해야한다. 그래서 새로운 α0, δ0가 주어져도 cos, sin을 최소한으로 이용하여 계산하는 방법을 여기서 소개한다. 그것은 변환행렬(Transformation Matrix)를 이용하는 방법이다.
변환행렬을 이용하면 다음과 같은 계산이 가능해진다. 세차운동을 적용하는 3x3 변환행렬을 P라고 하자. 그리고 α0, δ0를 직교좌표계로 바꾼 백터(vector)를 r0=[x0,y0,z0]라고 하고 세차운동이 적용된 α, δ를 직교좌표계를 바꾼 백터를 r=[x,y,z]라고 한다. 그럼 다음과 같이 계산하면 되겠다.
변환행렬 P는 세차운동이 적용되어 앞서 설명한 공식과 다르게 α0, δ0이 분리가 되었다. 행렬 P만 구하면 cos, sin과 같이 큰 자원을 소비하는 함수를 계산할 때마다 이용할 필요가 없어지며 대신, 단순하게 행렬과 백터 곱으로 수천,수만개의 별을 빠른 시간안에 세차운동을 적용할 수 있게 된다.
그럼 P는 어떻게 구할까? 그것은 회전변환행렬을 이용하면 된다. 앞서 구한 ζ, z, ϑ 값은 모두 세차운동에 의해 계산된 각도이다. 이 각도를 이용해 시작원기때의 적도좌표를 3번 회전변환하여 마지막원기때의 적도좌표를 구하는 것이다.
회전변환행렬에서 X축 회전 행렬을 Rx, Y축 회전 행렬을 Ry, Z축 회전행렬을 Rz라고 하자. 이들 행렬은 모두 3x3 행렬이다.
다른 참고를 보면 행렬안에 sin의 부호가 바뀐것을 볼 수 있는데 회전의 대상을 어떻게 정하느냐에 따라서 다른 결과이다. 천문계산에서 회전행렬은 위 정의대로 하는 것이 좋다.
시작원기 황경(ecliptic longitude),황위(ecliptic latitude)가 λ0,β0 이고 마지막원기 λ,β이라고 하자. 이때 각각의 직교좌표값을 r0, r이라고 한다면 변환행렬 P는 다음과 같다.
결과적으로 P는 다음과 같이 결정된다.
응용하기
지금까지 세차운동이 적용된 2가지 변환행렬을 알아보았다. 이 행렬은 필요에 따라서 선택해서 사용한다. 한가지 예를 들어보겠다. 적도좌표계에서 세차운동을 적용한 변환행렬을 Pequ, 황도좌표계에서 세차운동을 적용은 변환행렬을 Pecl이라고 하자. 황도좌표계에서 적도좌표계로 변환하는 행렬을 EclToEqu라고 가정한다. 만약 어떤 행성의 황경과 황위를 계산했다고 하면 다음과 같은 2가지 방법으로 새로운 적경, 적위를 계산할 수 있을 것이다.
r = EclToEquPecl r0
r = PequEcl2Equ r0
여기서 r0는 황경,황위를 담은 직각좌표계에서의 벡터값, r은 적경,적위를 담은 직각좌표계에서의 벡터값
2009년 세계천문의 해를 맞이해서 재미있는 행사를 합니다. 오는 토요일에 서울 올림픽 공원에서 천체망원경 400대를 한곳에 모아 기네스 기록에 도전한다고 합니다.
• 일 시 : 2009년 10월 31일 14:00 ~ 22:00
• 장 소 : 서울 올림픽공원 평화의 광장
• 주 최 : 국회의원 박영아, 기초기술연구회, 한국과학창의재단
• 주 관 : 한국천문연구원, 한국항공우주연구원, 2009 세계 천문의 해 한국조직위원회
• 후 원 : 교육과학기술부, 한국아마추어천문학회, 부산과학기술협의회
기네스 기록 측정 시간은 16:00~17:30으로 만약 기네스 기록 도전에 성공하면 영국 기네스월드레코드사에서 참가인증서를 발급해준답니다. wow~
천체망원경을 굳이 400대를 모으는 이유는 갈릴레이가 처음 망원경을 통해 밤하늘을 관측한지 400주년이 되는 해가 바로 올해이기 때문입니다. 참 뜻깊은 일이죠.
천체망원경이 없어도 다채로운 행사도 많이 준비되어 있기 때문에 남녀노소할 것없이 찾아오시면 재미있는 행사를 즐길 수 있을 겁니다. 꼭 놀러오세요. ^^
앞서 나는 천문학에서 사용하는 좌표계에 대해서 소개했었다.(http://blog.jidolstar.com/584) 여기서는 이들 좌표계 변환을 위해 몇 가지 표기법에 대해서 알아보고 좌표변환하는 식에 대해 설명하도록 하겠다.
α = 적경(right ascension). 이 값은 일반적으로 시(hours), 분(minutes), 초(seconds)로 표현된다. 필요하다면 어떤 공식에 사용하기 위해 degree값이나 radian값으로 변환해서 사용한다. degrees값을 시(hours)값으로 표현하기 위해 15로 나누어서 시, 분, 초로 변환할 수 있겠다.
δ = 적위(declination), 천구 적도의 북쪽이라면 +, 천구 적도의 남쪽이면 - 값을 가진다.
α1950 = B1950.0의 평균 분점(춘,추분점)을 기준으로 하는 적경
δ1950 = B1950.0의 평균 분점(춘,추분점)을 기준으로 하는 적위
α2000 = J2000.0의 평균 분점(춘,추분점)을 기준으로 하는 적경
δ2000 = J2000.0의 평균 분점(춘,추분점)을 기준으로 하는 적위
λ = 황경(ecliptical longitude), 춘분점(vernal equinox)으로부터 황도를 따라 측정한 경도
β = 황위(ecliptical latitude), 황도의 북쪽이면 +, 남쪽이면 -
l = 은경(galactic longitude)
b = 은위(galactic latitude)
h = 고도(altitude), 지평면 위는 +, 지평면 아래는 -
A = 방위각(Azimuth), 남점 또는 북점을 기준점으로 시계방향으로 잰 각. 기상학자나 항해자들은 방위각의 기준점을 북점으로 하여 북점(0˚), 동점(90˚), 남점(180˚), 서점(270˚)로 측정한다. 하지만 일부 천문학자들은 이 방법에 동의하지 않는다. 왜냐하면 적어도 북반구에 있는 관측자들이 시간각(hour angles)를 측정하기 위해 남쪽의 자오선을 기준으로 측정하기 때문이다. 내가 볼 때는 그건 별로 중요치 않다고 생각한다. 어느 관점에서 보느냐가 다를 뿐이다. 하지만 기준은 정해야겠지? 어쨌든 만약 남쪽 자오선을 기준으로 한다면 그 위에 올라온 천체는 시간각(H)과 방위각(A)가 모두 0˚가 된다.
ε = 황도의 기울기(obliquity of ecliptic). 황도와 천구의 적도 사이 각(angle)이다. 국제표준협회(International Astronomical Union, IAU)에서 평균기울기는 은 다음과 같이 정의하고 있다.
하지만 수차(aberration) 와 장동(nutation)의 영향을 받아 겉보기 적경과 적위를 사용한다면 ε + Δε 를 사용해야 한다. (이에 대한 자세한 내용은 다음에 언급하겠다.) 만약 α와 δ가 J2000.0의 표준 춘분점을 참고한다면 ε2000 = 23˚26´21˝.448 = 23˚.4392911 값을 사용해야 한다. B1950.0의 표준 춘분점을 참고한다면 ε1950 = 23˚.4457889 를 사용하면 되겠다.
L = 관측자의 경도, 그리니치(Greenwich) 자오선으로부터 적도를 따라 관측자의 위치까지 잰 각으로 앞으로 나오는 식은 서쪽을 +, 동쪽을 -로 한다. 서쪽이 +라고 하는 것은 사람들마다 시각이 다르다.
φ = 관측자의 위도, 북반구면 +, 남반구면 - 이다.
H = 지방시간각(the local hour angle), 자오선(meridian)으로부터 천구의 적도를 따라 서쪽방향으로 천체의 발까지 잰 각
θ = 지방항성시(the local sidereal time), 남중한 별의 시간각 또는 춘분점의 적경
θ0는 영국 그리니치(Greenwich)에서의 항성시이다.
시간각과 지방항성시 또는 그리니치 항성시, 관측자의 경도의 관계는 다음과 같다.
H = θ - α 또는 H = θ0 - L - α
만약 α가 장동(nutation)에 영향을 받는다면 항성시도 이에 영향을 받는다. 장동에 관련된 부분은 다음에 언급하겠다.
다음에 나오는 식은 각각의 좌표계에서 다른 좌표계로 변환하는 식이다. 식을 유도하는 과정은 생략하도록 하겠다.
1. 적도좌표계에서 황도좌표계로 변환
2. 황도좌표계에서 적도좌표계로 변환
3. 적도좌표계에서 지평좌표계로 변환
앞서 설명했던 시간각과 적경간에 변환 공식을 통해 시간각을 계산하여 방위각과 고도를 계산할 수 있다.
만약 남점 대신 북점을 기준으로 하는 방위각을 계산할려면 계산된 방위각에 180˚을 더하면 되겠다.
4. 지평좌표계에서 적도좌표계로 변환
5. 적도좌표계와 은하좌표계간 변환
은하좌표계는 국제천문협회(IAU)에 1959년에 정의했다. B1950.0의 평균 적도좌표계에서 은하(galactic, Milky Way)의 북극의 좌표는 다음과 같다.
α1950 = 12h49m = 192˚.25, δ1950 = +27˚.4
은하좌표계에서 은경의 기준점(궁수자리 서쪽부근)은 B1950.0 적도좌표계의 적도에서 은하좌표계 승교점(ascending node, 독수지자리 서쪽부근)과 약 33˚ 떨어져 있다.
이 값은 B1950.0 춘분점을 기준으로 정확하게 고정되어 있어 편리하게 사용할 수 있다.
B1950.0을 기준으로 하는 적도좌표계에서 은하좌표계로 변환하는 식은 다음과 같다.
B1950.0을 기준으로 하는 은하좌표계에서 적도좌표계로 변환하는 식은 다음과 같다.
1950.0 기준대신, 2000.0 기준으로 하는 식은 다음에 언급하겠다.
프로그래밍을 통하여 tan에 대한 계산을 할 때 주의할 점은 atan()가 아닌 atan2()를 사용해야한다. 왜냐하면 atan의 결과값은 -90˚~90˚인데 반해, atan2의 결과는 -180˚~180˚이기 때문이다.
천문학에서 천체의 위치를 나타내기 위해서 여러 좌표계(coordinate system)를 사용한다.
대표적인 좌표계로 다음과 같은 것이 있다.
1. 지평좌표계(Horizontal Coordinate System)
지금 내가 서있는 지평면이 기준면이 되고 북점(자전축방향) 또는 남점이 기준점이 되는 좌표계이다. 이 좌표계는 관측자 기준으로 별의 위치를 나타내는데 유용하다. Starpl에서 오른쪽 하단에 마우스를 오버했을때 보여주는 방위각,고도가 바로 이 좌표계에서 나타내는 방식이다.
방위각(azimuth)은 북점 또는 남점에서 시계방향으로 천체의 발까지 잰 각이고
고도(altitude)는 천체의 발로부터 천체까지 잰 각이다.
2. 적도좌표계(Equatorial Coordinate System)
지평좌표계의 한계는 지구위에 관측자가 바라보는 천체의 좌표이므로 지구의 공전과 자전, 그리고 관측자가 어디에 있느냐에 따라 그 위치가 계속 변한다는 단점이 있다. 그래서 고정된 천체(여기서는 항성=별을 의미)의 위치를 나타내기 위한 좌표계가 필요하다. 그것이 바로 적도좌표계이다.
적도좌표계는 지구의 적도를 천구상에 연장한 천구의 적도를 기준면으로 한다. 그리고 춘분점(vernal equinox point)이 기준점이 된다.
적도좌표계에서는 춘분점에서 천구의 적도를 따라 시계반대방향으로 천체의 발까지 잰 각을 적경(right ascension)이고 천체의 발로 부터 천체까지 지구의 자전축을 연장한 천구의 북극을 +방향으로 잰각을 적위(declination) 이라고 한다.
3. 황도좌표계(Ecliptic Coordinate System)
지구를 비롯한 행성은 태양을 중심으로 공전한다. 그래서 행성의 회전에 기준이 되는 좌표계가 필요하다. 그래서 만들어진 것이 바로 황도좌표계이다. 황도좌표계의 기준면은 바로 지구공전면(황도면)이며 기준점은 춘분점이다. 적도좌표계와 약 23.5도 기울어져 있으며 지구중심에서볼때 지심황도좌표계, 태양중심에서 볼때 일심황도좌표계로 분류된다. 춘분점을 기준으로 지구공전방향(황도)를 따라 잰각은 황경(celestial longitude), 천체의 발부터 천체까지 북쪽으로 +, 남쪽으로 -로 잰각을 북 황위(celestial latitude)라고 명한다.
4. 은하좌표계(Galatic Coordinate System)
위 3개의 좌표는 태양계에서 이뤄지는 좌표이다. 그렇기 때문에 은하를 중심으로하는 별들의 위치를 표현하는데는 한계가 있다. 우리 은하면을 기준면으로 하고 은하중심(궁수자리부근)을 기준점으로 하는 은하좌표계는 은하에서의 절대적 위치를 표현하는데 적합하다. 은하의 적도를 따라 시계반대방향으로 은하중심으로부터 천체의 발까지 잰각은 은경(galactic longitude), 천체의 발부터 천체까지 잰각을 은위(galactic latitude) 라고 한다.
은하좌표계는 1959년 국제천문단체(IAU)에서 정의했다. B1950.0 표준 적도좌표계에서 은하 북극(the galactic North Pole)는 적경 192.25도, 적위 +27.4도 이다.
필요에 따라 위의 4개의 좌표계를 서로 변환할 필요가 있다.
가령 서울에서 목성의 위치를 알고 싶을 때는 먼저 황도좌표계에서 목성의 위치를 계산한다음 적도좌표계로 변환한다. 그리고 관측지와 관측시간정보를 이용해 지평좌표계로 변환하면 관측지를 기준으로 목성의 위치가 어디에 있는지 확인할 수 있겠다.
이러한 계산을 하기 위해서 사전에 필요한 지식은 좀 많은 편이긴 하다.
왜냐하면 위 4개의 좌표계를 이해하는 것도 중요하지만 용어에 대한 정확한 이해가 필요하기 때문이다.
2009년 7월 22일 오전 9시 34분 경부터 2시간동안 일어나 세기 최대 일식을 관측했습니다. 일하는 시간이였지만 이런 멋진 천문쇼를 놓칠 수 없기 때문에 회사 직원들과 함께 보게 되었죠.
일식(Solar Eclipse)이란 달이 태양을 가리는 천문현상입니다. 부분적으로 가리면 부분일식, 전체를 가리면 개기일식이라고 하는데 아쉽게도 한국에서는 80%~90% 정도 가리는 것을 관측할 수 있었습니다. 중국에 다녀오신 분들은 개기일식까지 봐서 멋진 코로라와 대 낮에 별도 볼 수 있는 진기한 현상을 목격했을 겁니다.
아래는 소유하고 있는 12인치 돕소니안 천체망원경을 통해 흰판에 투영시켜 본 태양의 모습입니다. 주변에 구름까지 끼어서 사진촬영이 가능했네요.
망원경을 통해 본 일식(촬영:임형준)
아래 사진을 구름이 태양앞을 지나갈때 찍은 사진입니다. 멋지죠? 저렇게 되면 맨눈으로도 일식을 감상할 수 있습니다.
일식(촬영:임형준)
소유하고 있는 천체망원경입니다. 모델은 저... ㅋ
아래 사진처럼 천체망원경을 통해 투영해서 볼 수 있었습니다. 사실 망원경 앞에다 선필터(Sun Filter)를 달아야하는데... 준비를 못했네요 ^^;;
너무 태양이 밝아서 아래 처럼 플로피 디스크 분해한 것으로 직접 볼 수 있죠. 물론 저것가지고 직접 태양봐도 볼 수 있고요.
Papervision3D나 Away3D 라이브러리를 이용하지 않고 Flash Player 10 3D API만을 이용해 태양계의 행성인 토성을 그려보았다. 토성을 그리기 위해 먼저 표면부분과 고리부분의 Texture를 구해야한다. 아래 사이트에서 다양한 행성의 Texture 그림을 구할 수 있다.
토성을 모양을 만들기 위해 토성의 표면과 고리에 대한 Mesh데이타를 만들어야 한다. 아래코드는 고리(Ring) 부분의 Mesh데이타를 만드는 부분이다. 표면부분과 다르게 고리 Texture를 반복해서 그리는 데이타를 만든다.
/**
* 고리 Mesh 데이터 작성
* @param radius 고리 안쪽 반지름
* @param thickness 고리 두께
* @param div 고리 조각수
* @return mesh 데이터
*/
function createRingMesh( radius:Number, thickness:Number, div:uint ):GraphicsTrianglePath
{
var vertices:Vector. = new Vector.( 0, false );
var indices:Vector. = new Vector.( 0, false );
var uvtData:Vector. = new Vector.( 0, false );
var mesh:GraphicsTrianglePath = new GraphicsTrianglePath( vertices, indices, uvtData, TriangleCulling.NONE );
var s:Number = 0;
var x1:Number = radius;
var x2:Number = radius + thickness;
var y1:Number = 0;
var y2:Number = 0;
var z:Number = 0;
var cos:Number;
var sin:Number;
var n:Number = 0;
for( var i:uint = 0; i < div; i++ )
{
//Vertices
mesh.vertices.push(
x1, y1, z,
x2, y2, z
);
s = Math.PI * 2 * (i + 1) / div;
cos = Math.cos( s );
sin = Math.sin( s );
x1 = radius * cos;
x2 = (radius + thickness) * cos;
y1 = radius * sin;
y2 = (radius + thickness) * sin;
mesh.vertices.push(
x1, y1, z,
x2, y2, z
);
//UVT
mesh.uvtData.push(
0,1,1,
1,1,1,
0,0,1,
1,0,1
);
//Indices
n = i * 4;
mesh.indices.push( n, n+1, n+2, n+2, n+1, n+3 );
}
return mesh;
}
Enterfame시에 렌더링을 실시하는데 Utils3D.projectVectors(), graphics.beginBitmapFill(), graphics.drawTriangles() 메소드를 2번씩 호출한다. 즉, 토성의 구와 고리를 그리기 위해 투영, 렌더링을 2번씩 하는 것이다.
언뜻보면 이 코드는 문제가 없어보이지만 실제로 실행해보면 바로 문제가 있다는 것을 확인할 수 있다.
아래는 이 프로그램을 실행한 것이다.
마우스로 돌려보고 화살표키로 확대/축소도 할 수 있다. 또한 Space키 누르면 삼각형 부분이 보인다.
실행한 결과를 보면 문제가 있다. 토성 표면 뒤에 고리가 보인다. 당연히 저렇게 그려지면 안된다. 이 문제는 위의 방법처럼 Texture와 Mesh데이타가 2개여서는 방법이 나오지 않는다. 왜냐하면 graphics.drawTriangles() 함수를 2번 그려주게 되면 먼저 그린 것은 항상 나중에 그린것에 의해 가려지기 때문이다.
위 함수처럼 1번만 투영/렌더링 처리하면 이제 토성의 표면과 고리는 아래처럼 자연스럽게 나오게 된다.
하지만 완벽하지 않다. 이유는 렌더링시 Culling을 None으로 지정했기 때문이다. 이는 보이지 않는 표면까지 그린다는 의미이다. 고리의 경우 양쪽면이 다보여야한다. 그러므로 고리의 Mesh데이타는 None으로 지정한다. 하지만 토성 표면의 경우는 화면 앞쪽을 향하는 부분만 보이면 되므로 Culling을 Positive로 지정하면 된다. 첫번째 예제에서는 어짜피 Mesh 데이터가 2개이므로 상관없었지만 두번째의 경우에는 양면 다보여야하는 고리때문에 토성의 표면도 None처리 했다. 이는 보이지 않는 부분까지 렌더링하므로 그만큼 속도저하가 일어난다. 이를 해결하기 위해 Positive로 지정하되 고리를 앞뒤면으로 겹쳐서 그리면 된다. 하지만 이 방법밖에 없는지 의문이다.
정리하기
이런 작업은 신나는 일이다. ^^
이 토성에 Light효과를 주어 Shading 예제도 만들어봐야 겠다.
참고로 모든 작업은 Flash Builder 4에서 했으며 Flex 4 SDK를 이용했다. 결과물은 Flash Player 10이상 설치된 브라우져에서만 확인할 수 있다.
여기서 다루는 문제는 천문 관련 계산할 때 반드시 숙지하고 있어야할 각도 변환에 관련된 것이다. 매우 기초적인 내용이다. 꼭 천문 계산이 아니더라도 수학계산을 위해 이러한 내용은 잘 알고 있어야 한다.
혹시 다음 값을 어떻게 읽는가?
2h 44m 11.986s
49°13'42.48"
아마도 대부분 사람들이 다음처럼 읽을 것이다.
2시 44분 11.986초
49도 13분 42.48초
2h 44m 11.986s 는 시(hour)이며, 49°13'42.48"는 도(degree)이다.
잘 알고 있는 사실이지만 24시간은 360도에 대응한다. 그리고 1시간은 15°에 대응한다. 또한 시간에서의 1분은 도에서 15분과 대응한다. 문제는 여기서 발생한다. 한국어로 번역할때 시간의 1분과 도의 1분은 명확히 다른 단위라는 것이다. 영문으로는 시간의 분은 minute를 쓰고 도에서의 분은 arcminute를 사용한다.
이러한 시간과 도의 차이를 잘 모르고 용어를 섞어쓰면 나중에 분명히 문제가 발생한다. 그래서 도와 시간의 표현에는 영어를 쓰는 것이 안전하다. 다음처럼 쓰자.
2h = 2 hours 또는 2h
44 m = 2 minutes 또는 2m
11.986s = 11.986 seconds 또는 2 s
49° = 49 degrees 또는 49 deg
13' = 13 arcminutes 또는 13 arcmin
42.48" = 42.48 arcseconds 또는 42.48 arcsec
아래값을 보자.
1h 21m 23.2s
1°21'23.2"
위 값은 둘다 1.3564 값을 가진다.(둘다 분에는 60을 곱하고 초에는 3600을 곱해서 시나 도에 더하면 된다.) 하지만 단위가 하나는 hours이고 하나는 degrees이다. 1h 21m 23.2s 를 각도로 표시하기 위해서는 15가 곱해져야 한다. 결과적으로 1.3564 h * 15°/h = 20.346°가 된다.
앞서 설명한 도와 시간은 사람이 보기에 편한 단위이다. 누구나 360도와 24시에 대해서 복잡하다는 느낌을 받는 사람은 없을 것이다. 하지만 수학적 계산을 할 때는 이러한 값을 사용할 수 없다. 수학적 계산을 위해서는 각도와 시간은 항상 라디안(radian)값으로 변환해야한다. 지름 1의 원의 둘레값으로 π=3.141592653… 이다. 이 값이 radian이다. 즉 지름과 원의 둘레값의 단위를 동일하게 봄으로써 수학적 계산을 가능하게 한다. 360도와 24시는 2π=6.2831853…와 대응한다.
각도를 표현하는 단위는 지금까지 살펴본 결과 도(degree), 시(hour), radian 이라는 것을 알았다. 천문학에서 이것 외에는 사용하지 않는다. 가령, 적경(Right Asension),적위(Declination)은 각각 시와 도를 사용한다. 앞서 설명했듯이 시와 도는 수학계산에는 적합하지 않으므로 radian으로 변환해야한다. 가령, cos, sin과 같은 수학함수를 이용할 때 도, 시 단위로는 계산할 수 없으므로 반드시 radian으로 변환한 다음에 사용해야한다.
천문 프로그래밍을 한다면 각도 단위 변환을 하기 위해 다음과 같은 방법으로 변환값을 미리 만들어 사용한다.
/**
* Pi
*/
public static const PI:Number = 3.141592653589793238462643383279502884197;
/**
* Pi * 2
*/
public static const TPI:Number = 6.2831853071795864769252867665590;
/**
* Half of PI
*/
public static const HPI:Number = 1.5707963267948966192313216916398;
/**
* Math.sqrt(2);
*/
public static const SQRT2:Number = 1.5707963267948966192313216916395;
/**
* Radian -> Degree
*/
public static const R2D:Number = 57.295779513082320876798154814105;
/**
* Degree -> Radian
*/
public static const D2R:Number = 0.017453292519943295769236907684886;
/**
* Arcsecond -> Radian
*/
public static const S2R:Number = 4.8481368110953599359e-6;
/**
* Radian -> Arcsecond
*/
public static const R2S:Number = 206264.80624709635515647335733078; //3600 * 180/PI
/**
* Arcminute -> Radian
*/
public static const M2R:Number = 2.9088820866572159615394846141477e-4; // 1/60 * PI /180
/**
* Radian -> Arcminute
*/
public static const R2M:Number = 3437.7467707849392526078892888463; //60 * 180/PI
/**
* Arcminute -> degree
*/
public static const M2D:Number = 1/60;
/**
* degree -> Arcminute
*/
public static const D2M:Number = 60;
/**
* Radian -> Hours
*/
public static const R2H:Number = 3.8197186342054880584532103209403;
/**
* Hours -> Radian
*/
public static const H2R:Number = 0.26179938779914943653855361527329;
/**
* Degree -> Hour
*/
public static const D2H:Number = 1/15;
/**
* Hour -> Degree
*/
public static const H2D:Number = 15;
만약 시(hour)에서 도(degree)로 변환하려면 14h * H2D = 210 deg 가 된다. 이러한 방법을 이용해여 수학적 계산을 마무리 짓고 나온 결과값이 각도인 경우 그에 맞게 시(hour) 또는 도(degree)로 변경해주어 사람이 보기 편리하도록 만들어주면 되는 것이다.
길을 다니다가 천체망원경을 보고 신기하다듯이 오는 사람이 대부분이였다. 일본사람, 태국사람, 국적 모를 외국인도 흥미를 가지고 다녀갔다. 나는 12인치 돕소니안 천체망원경으로 사람들에게 달과 토성을 보여주었다. 대부분 사람들이 달의 크레이터를 보고 놀라움을 금치 못했다. 이 날 달이 상현달이라 오후 5시에도 보였기 때문에 어렵지 않게 달을 보여줄 수 있었다.
어두워 지면서 서서히 토성이 보이기 시작했다. 사자자리에 위치한 토성은 밝기 때문에 서울시내에서도 충분히 관측이 가능하다. 망원경의 아이피스 안에 아기자기한 토성을 본 사람들은 토성의 고리를 보고 신기해 했다. 정말 토성이 있고 고리가 있구나 하는 모습이였다.
이날 KBS World 라디오 방송에서 이번 행사를 취재해갔다. 방송은 들어보지 않았지만 아마도 사람들에게 별자리를 가르치는 것과 달을 보여주며 설명해주는 내 육성이 공개되지 않았을까 생각한다. ㅎㅎ
그날 교통사고까지 당해서 스트레스성 위산 과다분비로 인해 속이 쓰려 매우 컨디션이 좋지 않았지만 많은 사람들에게 별을 보여줬다는 좋은 추억을 만들 수 있어서 나름 기분은 좋았다.
아이한테 별을 보여주는 모습. 옆에 이어폰 낀 여자분은 KBS World 라디오 기자분이다.
12인치 돕소니안이다. 지금은 레이저 콜리메이터를 이용해 광축을 맞추고 있는 모습
달과 토성을 본 사람들에게 저렇게 봤던 대상을 붙이고 자신의 이름이나 메시지를 적는 행사도 곁들였다.
쌍안경을 이용해 달을 보는 아이. 많은 사람들이 달을 보려면 큰 망원경이어야 한다고 생각하지만 저렇게 쌍안경으로도 충분히 행성 및 성단, 달을 관측할 수 있다.(태양은 금물! 실명될 수 있음)
굴절망원경을 통해 달을 보는 모습
이날 초 대박 작품인 별지도. 여고 학생들이 저렇게 만들었다 야광별을 일일히 붙이고 별자리 선까지 그려주고 메시에 목록(성운,성단,은하 목록) 사진도 붙인 작품을 가지고 나왔다. 학생들의 열정에 박수를 보낸다.
행사를 준비하는 중
서울천문동호회 분이 가지고 계신 망원경. 적도의 EM-11 뽀대가 제대로다. 시상도 매우 깔끔했다.
서울역에서 별을 보여주는 모습. 오른쪽 하단에 보이는 큰 망원경은 16인치 돕소니안이다. 열심히 달을 맞추고 계신다. ^^;;
100시간 천문학 행사의 흥미로운 것은 4월 3일 오후 6시부터~4월 4일 오후 6시까지 “80대 망원경의 세계일주(Around the World in 80 Telescope)” 이벤트이다. “80대 망원경의 세계일주”는 지구가 한번 자전하는 24시간동안 허블우주망원경 등 세계 80대 첨단 망원경이 시간대별로 참여하는 인터넷 생중계 이벤트이다. 이 기간동안 지구촌 모든 사람들은 지구 반대편에서 천문학자들이 실제로 어떤 연구를 하고 있는지 인터넷을 통해 알 수 있다.
인터넷 중계는 독일 뮌헨 유럽남천문대 본부에서 주관하며, 방송은 유스트림 TV를 통해 생중계를 한다.
Live 24-hour webcast from astronomical observatories
Organised by ESO, the European Southern Observatory, from its HQ in Garching, Germany
시 간: 2009년 4월 3일 09:00 UT (한국시간 18:00) ~ 2009년 4월 4일 09:00 UT (한국시간 18:00)
기 간: 24시간
토성(Saturn)은 태양으로 부터 목성 다음으로 먼 행성이다. 지구에서 바라볼 때, 토성의 고리는 14~15년 주기로 기울기가 커졌다 작아졌다 한다. 토성의 고리는 아마추어 천체 관측가 뿐만아니라, 일반인들에게도 매우 흥미로운 모습을 보여준다. 작은 천체망원경만 가져도 토성의 고리를 확인할 수 있다. 별자리를 공부한 다음에 행성의 위치를 알게되는데 그때 망원경으로 관측하는 대상이 금성,목성 다음으로 토성이 아닐까 싶다.
토성의 밝고 아름다운 고리는 기울기가 감소함에 따라 대구경 천체망원경 조차도 관측하기 어려울 정도가 된다. 아쉽게도 현시점에서 토성의 고리는 점차 기울여지고 있으며 그 아름다운 고리는 보기 어려워지게 될 것이다.
하지만 너무 아쉬워할 필요는 없다. 토성의 고리를 못보는 대신 토성의 고리로 인해 안보이던 토성 위성의 토성면을 통과하는 매우 흥미로운 모습을 관측할 수 있을 것이니 말이다. 위 사진은 바로 그 모습을 보여주고 있다. 위 사진은 지난 2월 24일에 허블우주망원경(HST)이 찍은 사진이다. 위 사진에서 토성의 위성중 4개의 위성을 볼 수 있다. 가장 큰 위성은 토성에서 가장 큰 위성인 타이탄(Titan)이다. 가장 좌측에는 엔셀라두스(Enceladus)와 그의 그림자, 그 다음 좌측에는 디오네(Dione)과 그의 그림자이다. 우측 토성의 디스크 표면에 작은 점은 미마스(Mimas)이다. 타이탄과 미마스의 그림자는 토성표면 밖에 있어서 사진상에는 나오지 않았다.
토성의 적도 지름은 약 120,000 Km로 지구의 약 9배 이상이다. 부피도 지구의 760배에 달하지만 질량은 95배 밖에 안되기 때문에 토성의 평균밀도는 0.7g/cm3으로 토성을 담을 충분한 물이 있다면 물에 뜰 정도이다.
토성의 아름다운 고리는 얼마동안 보지 못할 것이지만 위성의 통과 모습을 망원경을 통해 볼 수 있지 않을까 기대감을 가지게 된다.
IC 5146은 은하수가 흐르는 백조자리의 북쪽 부근(적경 21h 53m 28.7s, 적위 +47° 16′ 01″) 위치하고 있어서 주변에 매우 풍성한 별들과 함께 관측할 수 있다. 이 성운은 Thomas Espin이 발견했으며 거미의 난낭이나 고치 모양이라 고치성운(The Cocoon Nebula, IC 5146)이라 불리게 되었다. 해석에 따라 누에고치성운으로 불리기도 하며 그냥 영어 발음대로 코쿤성운이라 불리워지기도 한다.
IC 5146 성운은 15광년 크기를 가지며 지구로부터 약 4,000광년 떨어진 곳에 위치하고 있다. 별이 탄생하는 다른 지역들과 비슷하게 IC 5146 성운안도 새로운 별무리가 만들어지고 있다. 수소가스 안에서 파랗고 뜨거운 젊은 별들이 탄생한다. 주변에 파랗게 보이는 분자성운은 반사성운이다. 성운의 중심 근처에 위치한 별들은 수십만년 밖에 안되는 아주 젊은 별로 예상된다.
IC 5146 성운은 겉보기 등급 약 7.2이상에 시야각 12’으로 천체망원경으로 찾기에 많이 힘든 편이다. 물론 자동추적장치가 달려있는 것이라면 모를까 손수 찾기 위해서는 많은 경험이 필요하다. 처음 별을 접하는 사람들은 사진과 같은 영상을 눈으로도 볼 수 있지 않을까 생각할 수 있지만 사진이니깐 저런 영상이 가능한 것이다. 눈으로 본다면 12인치 구경의 망원경으로 보더라도 아주 어두운 약간의 얼룩정도로만 확인할 수 있을 것이다. 본인도 아주 날씨 좋은 날, 딱 한번밖에 본적이 없는 이 성운은 그리 많이 관측되는 대상은 아니다. 하지만 직접 보고 사진으로 담아내는데 매력적인 성운이 아닐까 생각된다.