이 블로그를 시작한지도 3~4년이 되어 갑니다. 그동안 Flex, Flash, 천문, 스타플 관련해서 지속적으로 글을 써왔습니다. 지금 돌이켜보면 그렇게 열심히 써왔던 것들이 피가 되고 살이 되어 돌아온다는 것을 너무도 잘 느꼈습니다. 블로그를 통해 온라인에서 다양한 사람들과 교류를 할 수 있었고 미약하게 나마 좋은 사람들도 만나게 되었습니다. 또한 ACC, ACP라는 명함도 달게 되었고요.

이 블로그에는 되도록이면 Adobe 기술에 관련된 것 외에는 담지 않으려고 노력했습니다. 그래서 Flash 관련 내용이 대부분입니다. ACC가 된 이후로는 Adobe 기술에 대한 부분만 집중적으로 올렸었는데, 요즘에는 관련 글이 잘 써지지 않습니다. 왜냐하면 현재 주 업무가 아이폰 개발이다 보니 그렇네요. 그러다보니 블로그가 죽는다는 느낌이 듭니다. 또한 스스로 정리하는 것도 많이 줄어드는 것 같구요.

그래서 이제 좀더 포괄적으로 블로그를 운영하려고 합니다. 제가 최근에 공부하고 느끼는 모든 것을 왠만하면 다 담으려고 합니다.  관련기술, 천문, 스타플에 대한 것만 올리려고 합니다. 제가 좋아하는 드럼과 개인적인 일상 내용은 전부 배제할겁니다.

많은 지식이 있어서 이 블로그를 활용하는 것은 아닙니다. 오히려 너무도 부족함을 느끼기에 블로그를 더욱 쓰고 싶습니다. 지식 욕구를 채우고 또한 좋은 정보도 제공하며 많은 사람들을 만나는 통로를 이 블로그를 통해 만들어 갈 것입니다.


제가 천문에 관련된 프로그래밍을 조금 할줄 알다보니 태양의 위치 및 일출/일몰에 대한 문의가 자주 들어옵니다. 개인적인 소스는 있지만 높은 정확도를 위한 것이라 일반인들이 이해하기에는 수준이 높습니다.

출처 : http://very-bored.com/index.php?option=com_content&task=view&id=135&Itemid=29



대부분 문의유형을 살펴보면 태양전지판을 효율적으로 사용하기 위해 태양의 방향에 따라 입사각이 90도가 이뤄지도록 구동하는 장치를 개발을 해야한다던가 수족관의 전등을 일출/일몰 시간에 맞게 자동으로 On/Off시켜줘야 한다는 뭐 아주 간단하면서 정확도가 그리 중요하지 않은 수준의 구현을 요구하는 것들이 대부분 입니다.

일전에 관련되어 문의를 받았지만 요즘에는 개인적으로 너무 바쁘고 여유가 없어서 설명을 드리고 싶지만 드릴 수 있는 시간조차 없었습니다. 몇주가 답변을 못드리다가 잠깐 짬을 내어 답변을 드렸지요.

웹상에서 찾아보면 일몰/일출 시간 소스는 얼마든지 있습니다. 그 방법도 엄청 많이 나와있지요. 단지 어찌 찾아야하는 것인지 있어도 어찌 활용해야하는지 모르시는 분들이 대부분이라 생각합니다. 그래서 여기에 이 부분에 대해 설명한 사이트들을 소개하고 마지막으로 웹에 공개된 C++소스에 주석처리한 것을 공유하겠습니다.

태양위치 계산은 정확도에 따라서 계산방법은 천차만별입니다. 그러므로 완벽한 정답은 없습니다. 상황에 맞게 쓰시면 됩니다.
 
아래내용은 태양의 일출/일몰 계산 방법을 간략하게 소개하고 있습니다.
http://www.stargazing.net/kepler/sunrise.html
 
PHP 언어로 만들어진 일출/일몰 소스입니다.
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=39302&sca=%C7%D4%BC%F6&page=29
 
C또는 C++로 만들어진 일출/일몰 소스입니다.
http://www.sci.fi/~benefon/stuff.html
아래 붙여놓은 소스는 여기에서 구현한 C++소스를 주석처리 해놓은 것 입니다. 참고하시고 main()함수부터 천천히 보세요. 이것으로 근사적 일출/일몰 시간을 계산할 수 있습니다.

구현하신다음 맞는지 확인하기 위해 아래 링크를 참고하세요.
http://www2009.kasi.re.kr/knowledge/solun_riset.aspx

// 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;
}

어떤가요? 조금만 공을 들이면 완벽히 이해는 못해도 구현은 얼마든지 가능합니다.

글쓴이 : 지돌스타 (http://blog.jidolstar.com/705)


2009년 한국천문연구원 아마추어 천문학 발전을 위한 위탁과제로 만든 대한민국 인터넷 천문대(http://realsky.org) 입니다.

이 사업은 언제 어디서나 누구나 인터넷을 통해 쉽게 밤하늘을 관측하고 정보를 얻을 수 있는 것을 목표로 최초 제작되었습니다. 2009년 6월 부터 12월까지 프로젝트가 진행되었으며 이를 위해 미국 우주망원경연구소의 디지털하늘탐사(Digitized Sky Survey, DSS) 데이터를 이용해 전천의 밤하늘 이미지를 가공했고 이것을 보여주기 위해 Adobe Flash 기술을 이용했습니다.

이미지의 편집 및 이용권한은 천문노트(http://astronote.org) 에게만 있습니다.

클라이언트 엔진은 ActionScript 3.0이며 일부 Flex 4를 이용해 개발했습니다. 서버측 통신은 ZendAMF를 이용했습니다. 최초 개발한 만큼 아직 부족하나 앞으로 유용하고 다양한 형태로 개발할 계획입니다.

http://realsky.org

글쓴이 : 지돌스타(http://blog.jidolstar.com)

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에서 제공하고 있는 목록만 하더라도 엄청 많다. (참고 : Catalogues and files available at CDS) 은하, 성운/성단, 별의 단순 분류에 따른 목록도 있지만 학술적 목적에 의해 만들어진 목록도 꽤 된다는 것을 알 수 있다.

CDS에서는 많은 개발자들의 참여를 유도할 수 있는 서비스가 준비되어 있다.

이 개발자 코너를 통해 CDS에 제공하는 데이터를 다양한 형태로 가공해 다른 서비스를 만들 수 있다.

본인도 천체대상 검색이 필요했다. 사용자가 찾기 원하는 천체의 이름을 입력하면 그에 대한 정보를 얻어오는 기능이다. 그러나 엄청많은 이름의 천체목록을 다 검색하도록 만드는 것은 왠지 불가능해보인다. (언제 데이터베이스를 만들고 그들 의 연관 알고리즘을 언제 만들어!) CDS 개발자 코너에서 제공하고 있는 CDS XML Web Services는 이것을 가능하게 했다.

CDS XML Web Services : http://cds.u-strasbg.fr/cdsws.gml

이 서비스는 XML 형태로 SOAP(Simpe Object Access Protocal)을 이용해 서비스가 진행되며 Simbad, NED, VizieR에서 제공하는 천체목록을 검색해서 결과를 반환해준다.

위 서비스에서 Name Resolver 서비스가 있다.

Name Resolver는 천체이름을 입력하면 다른 천체이름과 천체에 대한 몇가지 이름정보를 반환해주는 역할을 한다.

현재 접근 주소는 4개가 있다. 그러므로 어느 한 주소로 접근하지 못하더라도 다른 주소로 접근하면 되겠다.


    위 주소로 접근해서 사용하는 예제도 CDS Name Resolver 서비스 문서에 매우 잘 나와 있으며 JavaPerl 예제도 있다.
     
    아래는 PHP 예제이다.

    <?php
    $wsdl_url = "http://cdsws.u-strasbg.fr/axis/services/Sesame?wsdl";
    $client = new SoapClient($wsdl_url);
    $tmp = $client->Sesame('M 31', 'x', true, "N");
    var_dump($tmp);
    ?>
    


    위 소스가 제대로 돌아가려면 php.ini 에 Soap가 동작할 수 있을 수 있게 모듈을 열어주어야 한다.  위와 같이 할 경우 M31 대상을 XML형태로 NED에서 찾는 것을 의미한다. XML 형태로 $temp에 저장되므로 별도로 XML 파서를 이용해야할 것이다. 한가지 예이긴 하지만 문서를 잘보면 사용방법을 익힐 수 있다. 읽어오는 방식도 XML뿐 아니라 HTML, String형태로도 반환하며 각종 옵션도 있으므로 꼼꼼히 챙겨보자. 단 deprecated로 표시된 것은 다음에 없어질 것이니 사용하지 말자. 위 형태 말고 다음처럼 쓸수도 있다.

    sesame("m31","x",true,"N"), sesame("m31","xi",false,"A"), sesame("m31","Hpi",true,"NS"), ...


    위 결과는 다음과 같다.


    <?xml version="1.0" encoding="UTF-8"?>
    <Sesame xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="http://vizier.u-strasbg.fr/xml/sesame_4.xsd">
    <Target option="N">
      <name>M 31</name>
      <!-- Q5133035 #1 -->
      <Resolver name="N=NED">
        <INFO>from cache</INFO>
        <otype>G</otype>
        <jpos>00:42:44.32 +41:16:08.5</jpos>
        <jradeg>010.6846833</jradeg>
        <jdedeg>+41.2690361</jdedeg>
        <refPos>1992ApJ...390L...9C</refPos>
        <errRAmas>375</errRAmas><errDEmas>375</errDEmas>
        <Vel><v>-300.09229</v><e>3.89730</e><r>1991RC3.9.C...0000d</r></Vel>
        <MType>SA(s)b</MType>
        <oname>MESSIER 031 </oname>
        <alias>NGC 0224</alias>
        <alias>Andromeda Galaxy</alias>
        <alias>UGC 00454</alias>
        <alias>CGCG 535-017</alias>
        <alias>CGCG 0040.0+4100</alias>
        <alias>MCG +07-02-016</alias>
        <alias>GIN 801</alias>
        <alias>B3 0040+409</alias>
        <alias>2MASX J00424433+4116074</alias>
        <alias>IRAS  00400+4059</alias>
        <alias>IRAS F00400+4059</alias>
        <alias>KTG 01C</alias>
        <alias>HOLM 017A</alias>
        <alias>PGC 002557</alias>
        <alias>UZC J004244.3+411608</alias>
        <alias>87GB 004002.2+405940</alias>
        <alias>87GB[BWE91] 0040+4059</alias>
        <alias>6C B004001.6+410004</alias>
        <alias>MY 0040+409A</alias>
        <alias>CXOM31 J004244.3+411608</alias>
        <alias>RX J0042.6+4115</alias>
        <alias>1RXS J004241.8+411535</alias>
        <alias>EXSS 0039.9+4059</alias>
        <alias>1H 0039+408</alias>
        <alias>1ES 0039+409</alias>
        <alias>XSS J00425+4102</alias>
        <alias>LGG 011:[G93] 001</alias>
        <alias>[PFJ93] 44</alias>
        <alias>[MHH96] J004241+411531</alias>
        <alias>[VCV2001] J004244.3+411610</alias>
        <alias>MESSIER 031:[KGP2002] r1-010</alias>
        <alias>MESSIER 031:[PFH2005] 321</alias>
        <alias>MESSIER 031:[VG2007] 001</alias>
        <alias>0039+408</alias>
        <alias>0040+4059</alias>
        <alias>LEDA 002557</alias>
        <nrefs>3044</nrefs>
      </Resolver>
    </Target>
    </Sesame>
    <!--- ====Done (2009-Dec-29,08:30:21z)==== -->
    


    결과에서 alias(별칭) 부분이 바로 검색한 M31의 다른 이름들이다. 정말 많다. ^^;
    간단히 위치정보(jpos, jradeg, jdedeg)도 알 수 있다.

    이를 이용해 다양한 정보를 제공하는 또 다른 천문학 관련 애플리케이션을 만들 수 있게 된다.
    혹시 지나가다가 이것을 이용해서 만든 프로그램이 있다면 알려주었으면 한다. ^^

    글쓴이 : 지돌스타(http://blog.jidolstar.com/641)


    싸이월드의 미니홈피는 수년간 국내에서 가장 영향력 있는 SNS(소셜 네트워크 서비스)로 자리매김했다. 하지만 나와 일촌만의 놀이터로 미니홈피는 굳어져 가고 있다는 평가를 받고 있다.

    개방과 공유를 핵심가치로 여기는 web 2.0이 전 세계를 강타하는 현재, 개인의 콘텐츠는 사람과 사람을 연결하는 새로운 소통의 도구로 사용되고 있으며 기술적으로도 많은 발전이 일어났다.

    블로그는 RSS(새로운 글이 작성될 경우 직접 방문하지 않더라도 자동으로 배달)를 기본 기능으로 가지고 있으며 해외의 대형 서비스들은 자사의 핵심기능을 오픈하고 타 서비스와의 공생을 선택했다.

    국내의 대형 포털 서비스 역시 세계적 흐름에 발맞춰 자사의 서비스를 속속 개방하고 있으며 국내 블로그 서비스 중 가장 많은 사용자를 보유한 네이버 블로그 역시 점진적으로 서비스 오픈 정책을 펼쳐가고 있다.

    최근 싸이월드의 이용률이 주춤하는 동안 그 뒤를 이을 새로운 서비스들이 속속 생겨나고 있다. 그 중 ‘스타플’ 서비스(http://starpl.com)에서는 미니홈피에서 자신의 글을 스타플로 옮길 수 있는 기능을 최근 오픈했다. 스타플은 사용자에게 실제로 존재하는 ‘별’을 개인공간으로 주고 자신의 별에 있는 타임라인에 일대기를 담을 수 있는 감성적인 서비스를 제공한다.

    스타플의 한 관계자는 “스타플이 개인의 일대기를 담을 수 있는 타임라인을 제공하기 때문에 미니홈피의 글을 옮겨오고 싶다는 사용자 의견이 많았다”며 “그래서 미니홈피의 글을 나의 별에 쉽게 담을 수 있는 기능을 개발하게 됐다”고 기능 개발에 대한 이유를 설명했다.

    이번 스타플에서 제공하는 ‘외부글 가져오기’ 기능은 사용자 미니홈피의 사진첩, 다이어리, 게시판 등의 거의 모든 글을 옮겨 올 수 있는 기능을 제공하며 자신의 타임라인에 시간순으로 담기게 되어 외부 서비스의 글을 이용해 손쉽게 자신의 일대기를 강화할 수 있게 됐다.

    또한 스타플에서는 앞으로 다양한 블로그 서비스의 글도 담아올 수 있도록 기능을 확대하여 제공할 예정이다.

    출처 : http://news.cnbnews.com/category/read.html?bcode=97512

    스타플 관련 다른 글
    [현장에서] 다음 세대를 위한 웹개방화 정책
    `제2의 트위터` 꿈꾼다
    새로운 스타플 업데이트 소식입니다!


    위에서 보여지는 캡쳐화면은 일본 국립천문대 다운로드 페이지(http://www.nao.ac.jp/download/index.html)의 일부이다. 해당 화면은 달을 종이로 만들 수 있도록 PDF 파일로 제공하고 있다. 국가차원에서 이렇게 재미있는 자료를 공개하고 있어 매우 좋아보였다.

    이곳 말고도 다양한 망원경 종이 공예를 할 수 있는 자료도 받을 수 있다.
    http://www.nro.nao.ac.jp/alma/J/outreach/papermodel.html 

    참고할 만한 자료
    일본 문부과학성에서 제공하는 우주도(宇宙圖)
    Flash로 구동되는 천문프로그램, 천문노트 별자리판(ver20070123)

    글쓴이 : 지돌스타(http://blog.jidolstar.com/637)

    일본 문부과학성에서 제공하고 있는 우주도 포스터이다. 인간을 중심으로하는 우주의 탄생부터 시작해 현재우주까지 하나의 포스터에 매우 자세하게 보여주고 있다.

    아래 링크로부터 다운로드 받을 수 있다.

    http://www.mext.go.jp/a_menu/kagaku/week/uchuu/001.zip

    만약 다운로드 받지 못하면 아래 링크에서 다운로드 받길 바란다.



    한국어로된 이런 멋진 포스터 안나오나?

    글쓴이 : 지돌스타(http://blog.jidolstar.com/636)

    적도좌표계(Equatorial Coordinate System)는 항성(별)의 위치를 측정하는 가장 기본좌표계이다. 이 좌표계에서 별의 위치는 적경(Right Ascension)과 적위(Declination)값이 되며 이 좌표값의 기준점은 춘분점이 된다. 세차 및 장동과 같은 지구의 미세한 변화로 인해 이 춘분점은 계속 바뀌므로 필요에 따라 기준 시간(원기, Epoch)를 지정한다. 

    현대의 별자리는 1930년 국체천문연맹(IAU)에서 88개의 별자리로 지정되어 있다. 이 별자리는 서양기준 별자리이며 각 나라 및 문화권 마다 다양한 별자리가 있긴 하지만 통상 별자리라고 하면 이 88개 별자리를 지칭한다. 

    별자리는 단순히 별과 별을 이어주는 선으로 연결된 것만 지칭하지 않는다. 명확한 별자리 영역(Constellation Boundaries)이 존재한다. 이 영역은 1875년을 원기로 하는 춘분점을 기준으로 만들어졌으며 오늘날에도 사용하고 있다. 1875년 당시의 별자리 경계선은 적경,적위에 따라 아래 그림처럼 네모 반듯한 모습을 가진다. (투영방식은 정적도법을 이용했다.)


    하지만 시간이 지날수록 지구의 운동으로 인해 춘분점이 변해감에 따라 1875년 당시의 별자리 영역은 조금씩 틀어지기 시작했다. 아래 그림은 2000년을 원기로 했을 경우 별자리 경계 영역을 보여주고 있다. 위 그림과 달리 왜곡되어 있는 모습을 쉽게 볼 수 있다.



    그러므로 어떤 특정 별 또는 천체가 어떤 별자리에 속하는지 확인하기 위해서는 그에 상응하는 계산을 해줄 필요가 있다. 즉, 1875년 기준으로 해당 천체의 별자리가 지정된 것이므로 주어진 원기에 대한 천체의 별자리를 찾기 위해서는 별자리 영역을 당시에 지정된 영역으로 왜곡한다.

    이러한 과정을 할 수 있는 소스 및 데이타가 이미 공개되어 있다. 다음 링크를 참고한다.

    Identification of a Constellation From Position (Roman 1987)

    C로 만들어진 코드도 있으므로 참고한다.
    http://astrocomplutense.es/dobles/program.c 

    나는 위에서 소개한 코드를 이용해서 Flash로 원기와 적경,적위를 입력하면 그에 대응하는 별자리 정보를 출력해주는 아주 간단한 애플리케이션을 만들어 보았다.


    이 프로그램은 세차운동만 적용되었으며 또한 보간데이터를 활용했기 때문에 아주 정확하게는 경계선 부근의 천체의 경우 실제 별자리가 안나올 수 있다.

    이 이론은 SNS서비스인 스타플(http://starpl.com)에도 적용되어 있다.


    글쓴이 : 지돌스타(http://blog.jidolstar.com/616)

    율리우스 적일(積日, 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와 GMT에 대한 더 자세한 내용은 아래 링크를 참고한다.

     

     

    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년부터)

     

    ΔT는 아래와 같이 변한다.

    • ΔT = +65초 (2000년)
    • ΔT = +69초 (2005년)
    • ΔT = +80초 (2015년)

     

    ΔT는 다음식으로도 유도가 가능하다.

    ΔT = 32.184 + (TAI-UTC) - (UT1-UTC)

     

    TAI-UTC은 해당년도까지 적용된 윤초이다. 이에 대한 자료는 [여기]를 참고한다.


    UT1-UTC는 세계시와 세계협정시 차이값이다. 이들 값에 대해서는 다음에 설명하는 세계협정시(UTC)를 보길 바란다.

     

    ΔT는 지구의 운동으로 인해 아주 정확하게 예측하는 것은 불가능하다. 결국 과거의 자료를 토대로 예측하는 방법을 쓸 수 밖에 없다. 아래 사이트에는 ΔT를 계산하는 c코드가 공개되어 있다. dltat.c 를 참고한다.

     

    ET에 대한 더욱 자세한 내용은 다음 글을 참고한다.

     

     

     

    국제원자시(International Atomic Time, 이하 TAI)

    지구의 운동 기반이 아닌 세슘원자시계를 기반으로한 국제표준이다. 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)에서 담당하게 되었다.

     

     

     

    세계협정시(Coordinated Universal Time, 이하 UTC)

    오늘날에는 일상생활에 UTC을 국제표준으로 삼고 있다. UTC는 TAI기반으로 UT1과 0.9초 내로 차이가 나도록 윤초(leap second) 개념을 도입한 것이다. 즉 TAI는 현재 가장 정확한 시간체계이고 UTC는 그 정확한 시간에 지구자전도 고려한 시간인 것이다.

     

    윤초는 1972년부터 국제시보국(BIH)에서 최초로 도입했고 1988년 1월 1일 부터는 국제지구자전연구부(IERS)에서 지구자전요소의 결정 및 윤초의 결정과 통보업무를 담당하고 있다.

     

    매월 말에 윤초를 넣을 수 있지만 6월 말, 12월 말에 더하거나 빼는 것만으로도 충분하다.

    아래 그림은 UT1과 UTC의 차이를 보여주고 있는 그래프이다. (출처:위키피디아)


    UT1과 UTC가 0.9초 내로 조정되는 것을 확인하자.



    참고로 UT1-UTC는 ΔUT 로 표현한다. 예언되는 ΔUT를 DUT로 쓰여진다.

     

    UT1 = UTC + DUT1

     

    위 식에서 DUT1은 IERS Bulletin A를 참고하여 예상이 가능하다. 2009년 DUT1은 다음과 같이 계산한다.

    DUT1 = UT1-UTC =   0.3597 -  0.00093 (MJD - 54924) - (UT2-UT1)

     

    여기에서 UT2-UT1은 UT설명시 나왔던 값이므로 계산후 그대로 대입하면 되겠다.

    [여기]에 DUT1 예상 결과가 잘 나와 있다.

     

    아래는 TAI와 UTC의 관계식이다.

     

    윤초(leap second) = TAI – UTC

     

    1972년에 윤초를 10초를 더한 것을 시작으로 2009년 까지 양의 윤초만 적용하여 위 공식에 의하면 윤초는 2009년 현재 34초가 된다.

     

     

    위 관계를 표로 나타내는 것은 다음 링크를 보자.

     

    아래 링크를 통해 UTC와 윤초에 대해서 더욱 공부할 수 있겠다.

     

    GPS 시간(GPST)

    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를 계산하는 방법에 대해서 생각해보자.

     

    1. Y는 해당년도, M는 월(1월=1,2월=2), D는 해당 월의 날짜이다. D는 시간값도 포함한 소수값으로 생각하자. 가령 3일 12시 UT라면 D=3.5이다.
    2. M>2인 경우 Y,M은 변경하지 않는다.
      M = 1 또는 2인 경우 Y=Y-1, M=M+12로 계산한다.
    3. 그레고리력(Gregorian Calendar)의 경우 아래처럼 계산한다.
      A = INT(Y/100), B = 2 – A + INT(A/4)
      여기서 INT는 ()안에 들어간 값을 넘지않는 가장 큰 정수이다.
      율리우스력(Julian Calendar)의 경우 B=0이다.
    4. 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가 음수값일때는 적용할 수 없다.

    1. JD + 0.5의 정수부분은 Z, 소수점 이하 부분은 F로 지정한다.
    2. A값 계산
      Z < 2299161이면 A=Z 이다.
      Z >= 2299161 이면 다음식을 적용
      alpha = INT( (Z – 1867216.25)/36524.25)
      A = Z + 1 + alpha – INt( alpha/4 )
    3. 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 )
    4. 일(day) 계산
      day = B – D – INT(30.6001 E ) + F
    5. 월(month) 계산
      E < 14일 경우 month = E – 1
      E = 14 또는 15일 경우 month = E - 13
    6. 년(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이 나온다. 결과는 수요일이다.

     

    참고글

     

    참고서적

    • Astronomical Algorithms 2nd, Jean Meeus

    오늘날 우리가 일상생활에서 사용하는 시간체계는 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는 정확하게 구할 수 있는 값이 아니다. 연구하는 사람마다 다르게 나오며 시간이 지날 수록 지구의 운동을 측정을 통해 계속 보정하여 다른 식으로 바뀌어질 수 있다. 그때는 이 식을 사용하는 사람이 알아서 기존에 사용하던 식을 대체할 필요가 있을 것이다.

     

    해당 년도에 대해 역사적으로 추론 또는 근래 계산법에 의한 ΔT의 오차범위에 대한 정보는 “Historycal values of DELTA T(ΔT)”를 참고한다.

     

    참고글

     

     글쓴이 : 지돌스타(http://blog.jidolstar.com/486)

    세차운동(歲差運動, 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

    z = ζ + (0”.79280+0”.000411*T)t2 + 0”.000205t3

    ϑ =(2004”.3109 – 0”.85330T + 0”.000217T2)t
           - ( 0”.42665+0”.000217T )t2 + 0.041833t3

     

    이 식은 IAU(International Astronomical Union, 1976)에서 지정한 값으로 관측을 통해 얻어지는 데이타로 만들어지는 식이다. 참고로 IAU에서는 IAU2006 세차모델을 사용하도록 권하고 있고 미해군천문대에서는 2009년부터 천문역서에 적용하고 있다.(참고 : IAU2006 세차모델)

     

    시작원기의 적경,적위를 (α0, δ0)라고 하고 세차운동이 적용된 마지막원기의 적경,적위를 (α, δ)로 한다면 위 수치적 표현공식을 이용해 다음과 같이 (α, δ)를 계산할 수 있다. 이 식을 유도하는 과정은 구면천문학에 관련된 책을 참고하기 바란다.

     

    A = cos(δ0)  sin( α0 + ζ )

    B = cos( ϑ ) cos( δ0 ) cos( α0 + ζ ) – sin( ϑ ) sin( δ0 )

    C = sin( ϑ ) cos ( δ0 ) cos( α0 + ζ ) + cos( ϑ ) sin( δ0 )

    tan(  α – z ) = A/B

    sin( δ ) = C

     

    이 식만으로도 정확한 계산을 할 수 있다. 그러나 컴퓨터 프로그램을 이용하여 계산을 한다면 이 식은 매우 비효율적인 식이 된다. 가령, 수천, 수만개의 별이 있다고 하자. 그 별들은 어떤 시작원기를 가지는 각각 다른 α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의 부호가 바뀐것을 볼 수 있는데 회전의 대상을 어떻게 정하느냐에 따라서 다른 결과이다. 천문계산에서 회전행렬은 위 정의대로 하는 것이 좋다.

     

    적도좌표계에서 세차운동을 적용한 변환행렬 P는 다음과 같이 주어진다.

     

     

     

    위 변환행렬은 ζ, z, ϑ 이 적용된 행렬곱이다. 이 행렬곱의 결과는 다음과 같다.

     

     

    컴퓨터 프로그램으로 계산할 때는 이렇게 변환행렬을 만들어 계산하면 되겠다.

     

     

    황도좌표계에서 세차운동적용 ( 변환행렬이용 )

     

    황도좌표계에서도 적도좌표계와 동일한 방식이 적용된다.

     

    Π = 174˚.876383889 + 3289”.4789 + 0”.60622 T2 
          - (869”.8089 + 0”.50491T)t + 0”.03536 t2

    π = (5029”.0966 + 2”.22226T – 0”.000042T2)t
         + (1”.11113 – 0”.000042T)t2 – 0”.000006t3

    η = (47”.0029 – 0”.06603T – 0”.000598T2)t
         + (-0”.03302 + 0”.000598T)t2 + 0.000060t3

     

    시작원기 황경(ecliptic longitude),황위(ecliptic latitude)가 λ0,β0 이고 마지막원기 λ,β이라고 하자. 이때 각각의 직교좌표값을 r0, r이라고 한다면 변환행렬 P는 다음과 같다.

     


     

    결과적으로 P는 다음과 같이 결정된다.

     

     

     

    응용하기

    지금까지 세차운동이 적용된 2가지 변환행렬을 알아보았다. 이 행렬은 필요에 따라서 선택해서 사용한다. 한가지 예를 들어보겠다. 적도좌표계에서 세차운동을 적용한 변환행렬을 Pequ, 황도좌표계에서 세차운동을 적용은 변환행렬을 Pecl이라고 하자. 황도좌표계에서 적도좌표계로 변환하는 행렬을 EclToEqu라고 가정한다. 만약 어떤 행성의 황경과 황위를 계산했다고 하면 다음과 같은 2가지 방법으로 새로운 적경, 적위를 계산할 수 있을 것이다.

     

    r = EclToEqu Pecl  r0

    r = Pequ Ecl2Equ  r0

    여기서 r0는 황경,황위를 담은 직각좌표계에서의 벡터값, r은 적경,적위를 담은 직각좌표계에서의 벡터값

     

    세차운동 계산기(Precession Calculator)

    이 프로그램은 지금까지 설명한 내용을 토대로 만든 프로그램이다.  

     

     

    참고


    글쓴이 : 지돌스타(http://blog.jidolstar.com/487)

    한국형 트위터 열풍...'스타플'이 왔다.

    이미지 출처 : http://pdf.fnn.co.kr/pdf/2009/10/29/df01391029.PDF


    포커스 일간지에 10월 29일 일자로 스타플 소개가 큼직하게 나왔습니다. 칭찬 일색으로 스타플을 소개해서 기분이 좋더군요. 아직 부족한 것이 많지만 사용자에게 감동을 주는 서비스를 만들도록 노력하고 있습니다.

    스타플(http://starpl.com)은 내별찾기 과정을 통해 내 별을 받고 내 별을 꾸미고 내 인생을 타임라인에 담으며 키워드로 다른 사람들과의 정보공유를 만드는 SNS(소셜 네트워크 서비스)입니다.

    다음 Flash 내별찾기 게임을 통해 언제든지 내별을 찾을 수 있습니다. ^^



    글쓴이 : 지돌스타(http://blog.jidolstar.com/612)

    안타깝게도 우천으로 취소되었다고 합니다. ㅜㅜ
    2009년 세계천문의 해를 맞이해서 재미있는 행사를 합니다. 오는 토요일에 서울 올림픽 공원에서 천체망원경 400대를 한곳에 모아 기네스 기록에 도전한다고 합니다. 

    • 일 시 : 2009년 10월 31일 14:00 ~ 22:00
    • 장 소 : 서울 올림픽공원 평화의 광장
    • 주 최 : 국회의원 박영아, 기초기술연구회, 한국과학창의재단
    • 주 관 : 한국천문연구원, 한국항공우주연구원, 2009 세계 천문의 해 한국조직위원회
    • 후 원 : 교육과학기술부, 한국아마추어천문학회, 부산과학기술협의회

    기네스 기록 측정 시간은 16:00~17:30으로 만약 기네스 기록 도전에 성공하면 영국 기네스월드레코드사에서 참가인증서를 발급해준답니다. wow~

    천체망원경을 굳이 400대를 모으는 이유는 갈릴레이가 처음 망원경을 통해 밤하늘을 관측한지 400주년이 되는 해가 바로 올해이기 때문입니다. 참 뜻깊은 일이죠. 

    천체망원경이 없어도 다채로운 행사도 많이 준비되어 있기 때문에 남녀노소할 것없이 찾아오시면 재미있는 행사를 즐길 수 있을 겁니다. 꼭 놀러오세요. ^^

    자세한 내용은 공식홈페이지에서 : http://www.astronomy2009.kr/400_telescope/page_00.aspx

    아참... 저도 기네스에 참가합니다. olleh~~ㅋㅋ

    글쓴이 : 지돌스타(http://blog.jidolstar.com/611

    천문학에서 자주 언급되는 상수만 적어봅니다.

    물론 천문프로그램 하는 입장에서만 정리했습니다. 더 많은 상수가 수두룩 하죠~ ^^

     

    수학 상수 Methematical constants

     

     π = 3.14159 26535 89793 23846.....

     e = 2.71828 18284 59045 23536.....

     1 radian = 180/π degrees = 57.295 779 513 082 degrees = 206 264.806 247 arcseconds

     1 degree = π/180 radian = 0.017 453 292 519 943 radian

     log10a = log e a / log e 10 = 0.434 294 481 903 log e a

     

     

    거리 Distances

     

    1 천문단위 (1 astronomical unit, 1 AU)

     = 149 597 870 km

     = 499.0048 light-seconds

     = 8.32 light-minutes

     = 0.005 77 55 183 light-day

     

    1 파섹 ( 1 parsec, 1pc )

     = 30.8568 x 1012 km

     = 3.2616 광년( light-years, ly)

     = 206264.8 AU

     = 지구-태양간의 거리(1AU)에 대한 삼각시차 1"

     

    1 광년 ( 1 light-year )

     = 9.4607 x 1012 km

     = 0.30660 parsec

     = 63241 AU

     = 진공중에서 빛이 1년동안 갈 수 있는 거리

     

    평균 지구-달 거리 ( Mean Distance Earth-Moon )

     = 384400 km

     

    지구의 적도 반지름 ( Earth equatorial radius ) = 6378.14km

     

    지구의 극 반지름 ( Earth polar radius ) = 6356.76 km

     

    태양의 지름 ( Diameter of Sun ) = 1392000km

     

    달의 지름 (Diameter of Moon ) = 3476 km

     

    시간 Time

     

    1 항성일(1 sideral day) = 평균태양시 23시 56분 04.0905초 = 평균태양일 0.9972695663 일

    1 평균태양일(1 mean solar day) = 1.00273790935 항성일

     

    원기 2000.0년에 평균태양일내 년(Year)의 길이

     - Tropical(춘분점-춘분점) 365.242190일

     - Sidereal(고정된별-고정된별) 365.256363일

     - Anomalistic(근일점-근일점) 365.259636일

     - Julian 365.25

     

    평균태양일내 달의 회전 주기 길이

     - Tropical(춘분점-춘분점) 27.321582일

     - Sidereal(고정된별-고정된별) 27.321662일

     - Anomalistic(근일점-근일점) 27.554550일

     - Draconic(승교점-승교점) 27.212221일

     - Synodic(그믐-그믐) 29.530589일

     

    여기서 평균태양일(mean solar days)라느 것은 정확하게는  역학적시간(DT, Dynamical time)을 기반으로 형성된 역표일(日, Ephemeris days)이다. 1역표일은 대략적으로 원기 1900.0년에 1평균태양일과 동일하다.

     

     

    그외 값 Varia

     

    황도 평균 기울기 Mean obliquity of the ecliptic

     - 1900년 : 23도 27' 08"

     - 1950년 : 23도 26' 45"

     - 2000년 : 23도 26' 21"

     - 2050년 : 23도 25' 58"

     

    지구궤도 이심률 Eccentricity of Earth's orbit

     - 1900년 : 0.016751

     - 2000년 : 0.016709

     - 2100년 : 0.016666

     

    일반적인 연간세차 General annual precession

     - 1900년 : 50".269

     - 2000년 : 50".291

     - 2100년 : 50".313

     

    지구의 편평도 Flattening of the Earth = 1/298.257

     

    가우스 중력 상수 Gaussian gravitational constant :

     - k = 0.017 202 098 95

     - 라디안 값은 0.985 607 6686

     

    진공중에 빛의 속력 Speed of light in vacuo

     - 299 792.458 km/seconds

     

    지구-달 질량비 Earth-Moon mass ratio = 81.3007

     

    태양-지구 질량비 Sun-Earh mass ratio - 332946

     

    앞서 나는 천문학에서 사용하는 좌표계에 대해서 소개했었다.(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)에서 평균기울기는 은 다음과 같이 정의하고 있다.


            ε0 = 23˚26´21˝.448 - 46˝8150T - 0˝.00059T2 + 0.˝001813T3


    T는 J2000.0을 원기로 하여 100년 단위로 계수하는 시간이다.


    하지만 수차(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˚이기 때문이다.

     


    글쓴이 : 지돌스타(http://blog.jidolstar.com/585)

     

     

    천문학에서 천체의 위치를 나타내기 위해서 여러 좌표계(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개의 좌표계를 이해하는 것도 중요하지만 용어에 대한 정확한 이해가 필요하기 때문이다.

     

    조만간 계산에 사용되는 관련 용어와 계산식, 그리고 예제에 대한 글을 올리도록 하겠다.

     

    글쓴이 : 지돌스타( http://blog.jidolstar.com/584 )

    2009년 7월 22일 오전 9시 34분 경부터 2시간동안 일어나 세기 최대 일식을 관측했습니다. 일하는 시간이였지만 이런 멋진 천문쇼를 놓칠 수 없기 때문에 회사 직원들과 함께 보게 되었죠.

    일식(Solar Eclipse)이란 달이 태양을 가리는 천문현상입니다. 부분적으로 가리면 부분일식, 전체를 가리면 개기일식이라고 하는데 아쉽게도 한국에서는 80%~90% 정도 가리는 것을 관측할 수 있었습니다. 중국에 다녀오신 분들은 개기일식까지 봐서 멋진 코로라와 대 낮에 별도 볼 수 있는 진기한 현상을 목격했을 겁니다.

    아래는 소유하고 있는 12인치 돕소니안 천체망원경을 통해 흰판에 투영시켜 본 태양의 모습입니다. 주변에 구름까지 끼어서 사진촬영이 가능했네요.

    망원경을 통해 본 일식(촬영:임형준)



    아래 사진을 구름이 태양앞을 지나갈때 찍은 사진입니다. 멋지죠? 저렇게 되면 맨눈으로도 일식을 감상할 수 있습니다.

    일식(촬영:임형준)



    소유하고 있는 천체망원경입니다. 모델은 저... ㅋ

    아래 사진처럼 천체망원경을 통해 투영해서 볼 수 있었습니다. 사실 망원경 앞에다 선필터(Sun Filter)를 달아야하는데... 준비를 못했네요 ^^;;

    너무 태양이 밝아서 아래 처럼 플로피 디스크 분해한 것으로 직접 볼 수 있죠. 물론 저것가지고 직접 태양봐도 볼 수 있고요.




    아래는 그날 찍은 동영상입니다.


    유튜브에 일식에 대한 멋진 영상이 있네요. 참고하세요. ^^



    멋진 경험이였고 중국에서 보지 못한게 못내 아쉽네요. ^^

    글쓴이 : 지돌스타(http://blog.jidolstar.com/562)

    토성(Saturn)

     

    Papervision3D나 Away3D 라이브러리를 이용하지 않고 Flash Player 10 3D API만을 이용해 태양계의 행성인 토성을 그려보았다. 토성을 그리기 위해 먼저 표면부분과 고리부분의 Texture를 구해야한다. 아래 사이트에서 다양한 행성의 Texture 그림을 구할 수 있다.

     

    http://planetpixelemporium.com/saturn.html

     

    토성의 고리 Texture

    토성의 표면 Texture

     

    Texture를 이용해 3D로 만들기 위한 아이디어는 아래 링크를 참고한다.

     

    [Flash 3D]우리 아가 회전시키기 2-Texture를 이용해 여러모양 만들기

    [Flash 3D]우리 아가 회전시키기-UV맵핑,원근투영 이용

     

     

    토성 그리기 : 표면과 고리가 겹치는 문제

     

    지구와 같은 행성과 다르게 토성의 경우에는 고리가 있다. 토성의 표면은 그냥 구형태로 Mesh데이타를 만들어 처리하면 된다. 하지만 고리의 경우는 다른 형태로 Mesh데이타를 만들어야 한다. 설명은 생략하겠다.

     

    아래는 아래 예시의 소스이다.

    invalid-file

    고리와 구가 겹치는 문제가 있는 소스

     

    토성을 모양을 만들기 위해 토성의 표면과 고리에 대한 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번씩 하는 것이다.

    private function onEnterFrame( event:Event ):void
    {
        world.identity(); //단위행렬로 전환 
        world.appendRotation( getTimer() * 0.0027, Vector3D.Z_AXIS );
        world.appendRotation( xRotation, Vector3D.X_AXIS );
        world.appendRotation( yRotation, Vector3D.Y_AXIS );
        world.appendTranslation(0, 0, viewPortZAxis); //이동 
        world.append(projection.toMatrix3D()); //투영 변환 적용 
        
        // mesh 데이터를  투영하여  projected 생성 
        // uvtData도 갱신된다. 갱신되는 데이터는 T값이다. 
        Utils3D.projectVectors( world, saturnFaceMesh.vertices, saturnFaceProjected, saturnFaceMesh.uvtData );
        Utils3D.projectVectors( world, saturnRingMesh.vertices, saturnRingProjected, saturnRingMesh.uvtData );    
        
        viewport.graphics.clear();
        // Triangle 라인을 그림 
        if( visibleTriangle )
        {
            viewport.graphics.lineStyle( 1, 0xff0000, 0.1 );
        }
        
        //Texture 입힌다.
        viewport.graphics.beginBitmapFill( saturnFaceTexture, null, false, true );
        viewport.graphics.drawTriangles( saturnFaceProjected, getSortedIndices(saturnFaceMesh), saturnFaceMesh.uvtData, saturnFaceMesh.culling );                
        viewport.graphics.beginBitmapFill( saturnRingTexture, null, false, true );
        viewport.graphics.drawTriangles( saturnRingProjected, getSortedIndices(saturnRingMesh), saturnRingMesh.uvtData, saturnRingMesh.culling );                
    }
    

     

    언뜻보면 이 코드는 문제가 없어보이지만 실제로 실행해보면 바로 문제가 있다는 것을 확인할 수 있다.

    아래는 이 프로그램을 실행한 것이다.

     

     

    마우스로 돌려보고 화살표키로 확대/축소도 할 수 있다. 또한 Space키 누르면 삼각형 부분이 보인다.

     

    실행한 결과를 보면 문제가 있다. 토성 표면 뒤에 고리가 보인다. 당연히 저렇게 그려지면 안된다. 이 문제는 위의 방법처럼 Texture와 Mesh데이타가 2개여서는 방법이 나오지 않는다. 왜냐하면 graphics.drawTriangles() 함수를 2번 그려주게 되면 먼저 그린 것은 항상 나중에 그린것에 의해 가려지기 때문이다.

     

     

    토성 그리기 : 고리 겹치지 않게 만들기

     

    invalid-file

    표면과 고리가 겹치지 않는 소스

     

    위처럼 고리가 토성표면에 겹치는 문제를 해결하기 위한 방법은 Texture를 하나로 통합하고 Mesh데이타도 하나로 만든다. 그리고 graphics.drawTriangles() 를 한번만 호출하도록 하면 된다.

     

    아래 함수는 고리, 표면 Texture를 1개의 텍스쳐로 만들어준다.

    /**
     * 텍스쳐 생성 
     * @param faceTexture 표면의 BitmapData
     * @param ringTexture 고리의 BitmapData 
     * @return TexturInfo의 객체 
     */ 
    function createTexture( faceTexture:BitmapData, ringTexture:BitmapData ):TextureInfo
    {
    	var texture:BitmapData;
    
    	texture = new BitmapData( 
    			Math.max( faceTexture.width, ringTexture.width ), 
    			faceTexture.height + ringTexture.height, 
    			true,
    			0xff000000 
    	);
    
    	faceTexture.lock();
    	ringTexture.lock();
    
    	var facePixels:ByteArray ;
    	var ringPixels:ByteArray;
    	facePixels = faceTexture.getPixels( new Rectangle( 0, 0, faceTexture.width, faceTexture.height ) );
    	ringPixels = ringTexture.getPixels( new Rectangle( 0, 0, ringTexture.width, ringTexture.height ) );
    	facePixels.position = 0;
    	ringPixels.position = 0;
    
    	texture.setPixels( 
    		new Rectangle( 0, 0, faceTexture.width, faceTexture.height ), 
    		facePixels 
    	);
    	texture.setPixels( 
    		new Rectangle( 0, faceTexture.height, ringTexture.width, ringTexture.height ), 
    		ringPixels 
    	);
    	
    	var faceRect:Rectangle = new Rectangle( 0, 0, faceTexture.width, faceTexture.height );
    	var ringRect:Rectangle = new Rectangle( 0, faceTexture.height+1, ringTexture.width, ringTexture.height );
    	
    	faceTexture.unlock();
    	ringTexture.unlock();
    	
    	return new TextureInfo( texture, faceRect, ringRect ); 
    }
    

     

    결국 아래 그림처럼 Texture BitmapData가 만들어진다.

     

    위 함수에 TextureInfo는 실제 texture Bitmap정보와 Texture상의 표면과 고리 부분에 대한 영역정보를 가지고 있다. 이 영역정보를 가지고 Mesh 데이타를 만들도록 한다.

     

    /**
     * 토성모양의 Mesh 데이타 
     * @param textureInfo 텍스쳐 정보 
     * @return Mesh 데이타 
     */ 
    function createMesh( textureInfo:TextureInfo ):GraphicsTrianglePath
    {
    	var width:Number = textureInfo.texture.width;
    	var height:Number =textureInfo.texture.height;
    	var faceRect:Rectangle = textureInfo.faceRect;
    	var ringRect:Rectangle = textureInfo.ringRect;
    
    	var minU:Number;
    	var maxU:Number;
    	var minV:Number;
    	var maxV:Number;
    	
    	//표면 Mesh 데이타 만들기 
    	minU = faceRect.x / width;
    	maxU = (faceRect.x + faceRect.width) / width;
    	minV = faceRect.y / height;
    	maxV = (faceRect.y + faceRect.height) / height;
    	var faceMesh:GraphicsTrianglePath = createSphereMesh( 50, 24, 24, minU, maxU, minV, maxV );
    	
    	//고리 Mesh 데이타 만들기 
    	minU = ringRect.x / width;
    	maxU = (ringRect.x + ringRect.width) / width;
    	minV = ringRect.y / height;
    	maxV = (ringRect.y + ringRect.height) / height;
    	var ringMesh:GraphicsTrianglePath = createRingMesh( 70, 20, 50, minU, maxU, minV, maxV );
    
    	//고리 Mesh 데이타에서 Index 부분 조정 
    	var deltaIndex:uint = faceMesh.vertices.length/3; //Vertex는 x,y,z 3개씩 묶이므로... ^^
    	var length:uint = ringMesh.indices.length;
    	for( var i:int = 0; i < length; i++ )
    	{
    		//아래와 같이 2개의 mesh가 합쳐지면 뒤에 붙는  ring부분의 index값이 변경되야한다.
    		ringMesh.indices[i] += deltaIndex; 
    	}
    	
    	//최종 Mesh 데이타 완성 
    	var mesh:GraphicsTrianglePath = new GraphicsTrianglePath();
    	mesh.vertices = faceMesh.vertices.concat( ringMesh.vertices );
    	mesh.uvtData = faceMesh.uvtData.concat( ringMesh.uvtData );
    	mesh.indices = faceMesh.indices.concat( ringMesh.indices );
    	mesh.culling = TriangleCulling.NONE;
    	return mesh;	
    }
    

     

    위 함수는 2개의 Mesh데이터를 이용해 1개의 Mesh데이타로 통합해준다. 이로써 이제는 투영, 렌더링을 한번만 하도록 한다.

     

    private function onEnterFrame( event:Event ):void
    {
    	world.identity(); //단위행렬로 전환 
    	world.appendRotation( getTimer() * 0.0027, Vector3D.Z_AXIS );
    	world.appendRotation( xRotation, Vector3D.X_AXIS );
    	world.appendRotation( yRotation, Vector3D.Y_AXIS );
    	world.appendTranslation(0, 0, viewPortZAxis); //이동 
    	world.append(projection.toMatrix3D()); //투영 변환 적용 
    	
    	// mesh 데이터를  투영하여  projected 생성 
    	// uvtData도 갱신된다. 갱신되는 데이터는 T값이다. 
    	Utils3D.projectVectors( world, mesh.vertices, projected, mesh.uvtData );
    	
    	viewport.graphics.clear();
    
    	// Triangle 라인을 그림 
    	if( visibleTriangle )
    	{
    		viewport.graphics.lineStyle( 1, 0xff0000, 0.1 );
    	}
    	
    	//Texture 입힌다.
    	viewport.graphics.beginBitmapFill( textureInfo.texture, null, false, true );
    	viewport.graphics.drawTriangles( projected, getSortedIndices(mesh), mesh.uvtData, mesh.culling );            	
    
    }
    

     

    위 함수처럼 1번만 투영/렌더링 처리하면 이제 토성의 표면과 고리는 아래처럼 자연스럽게 나오게 된다.

     

     

    하지만 완벽하지 않다. 이유는 렌더링시 Culling을 None으로 지정했기 때문이다. 이는 보이지 않는 표면까지 그린다는 의미이다. 고리의 경우 양쪽면이 다보여야한다. 그러므로 고리의 Mesh데이타는 None으로 지정한다. 하지만 토성 표면의 경우는 화면 앞쪽을 향하는 부분만 보이면 되므로 Culling을 Positive로 지정하면 된다. 첫번째 예제에서는 어짜피 Mesh 데이터가 2개이므로 상관없었지만 두번째의 경우에는 양면 다보여야하는 고리때문에 토성의 표면도 None처리 했다. 이는 보이지 않는 부분까지 렌더링하므로 그만큼 속도저하가 일어난다. 이를 해결하기 위해 Positive로 지정하되 고리를 앞뒤면으로 겹쳐서 그리면 된다. 하지만 이 방법밖에 없는지 의문이다.

     

     

    정리하기

     

    이런 작업은 신나는 일이다. ^^

     

    이 토성에 Light효과를 주어 Shading 예제도 만들어봐야 겠다.

     

    참고로 모든 작업은 Flash Builder 4에서 했으며 Flex 4 SDK를 이용했다. 결과물은 Flash Player 10이상 설치된 브라우져에서만 확인할 수 있다.

     

    위 코드는 아래 링크에서도 볼 수 있다.

     

    Saturn 3D, 토성, 고리 중첩 해결못한 것

    Saturn 3D, 토성, 고리 중첩 해결한 것

     

    참고사이트

    [Flash 3D]우리 아가 회전시키기 2-Texture를 이용해 여러모양 만들기

    [Flash 3D]우리 아가 회전시키기-UV맵핑,원근투영 이용

     

    글쓴이 : 지돌스타(http://blog.jidolstar.com/547)

     

     

    스타플(starpl.com)에서 별에서 키우는 애완동물 아이템인 스타펫을 출시했습니다. 별에서 키우는 애완동물인 만큼 외계생물이겠군요. ^^;

     

    밥은 별가루예요. 별가루는 열심히 활동하는 사람에게 준답니다. 별가루로 각종 아이템, 위젯, 별스킨 등도 구입할 수 있습니다.

     

    성장과정에서 별가루를 안주면 스타펫이 배고파 죽어 유령이 되요. 성인이 될 때까지 잘 키워주셔야합니다.

     

     

     

    스타펫의 알의 종류는 3가지입니다. 같은 모양의 알이더라도 별가루를 어떤 식으로 주냐에 따라 성장과정이 달라집니다.

     

    그럼 스타펫을 구입하러 가볼까요?

     

    스타펫 구입하기

     

     

     

    아이구 우리 아가들... 배고프다고 하네요. 빨랑 별가루 줘야지~ 아빠가 이쁘게 키워줄께~ ^^

     

    관련글

     

    홍보동영상

     

    스타플

     

     

    5000m 고도에서 본 은하수(출처 & 저작권 : Serge Bruner)

     

    아래 동영상은 미국 텍사스주 스타파티(star party)에서 플로리다대학 교수 william Castleman이 밤 21시 20분 부터 다음날 아침 6시 43분까지 어안렌즈를 통해 찍은 모습을 40초로 압축한 영상이다.

     

     

    아름다운 은하수가 지구의 자전에 의해 동에서 서로 움직이는 모습과 간혹 별똥별(유성)의 모습이 보인다. 저런 밤하늘을 본지 꽤 오래되었는데... 언제 하루 날 잡아 별보러 가고 싶다.

     


    Powered by Astrodraw 2009년 4월 26일 저녁 7시 대한민국 서울

     

    지금까지 수성을 보지 못했던 분이시라면

    이번 주말을 노려보면 좋을것 같습니다.

    4월 26일 일요일

     

    수성 동방최대이각 20.4°
    수성 달 1.9° 근접

    이 동시에 있습니다.

     

    거기에 멋진 플레이아데스 성단까지~

    저녁에 먼저 달과 황소자리 플레이아데스를 찾은 후

    그 사이를 본다면 누구나 쉽게 수성을 볼 수 있으리라 생각합니다.

    서쪽하늘이 확 트인 곳에서 보세요. ^^

     

    출처 : 천문노트

    무주 반디별 천문대에 계신 "Starfield"님의 블로그에 있는 글이다.

     

     

    유용하고 재미있는 글이라서 링크 걸어둔다.

     

    참고로 달사진은 다른 천체사진에 비해서 촬영하는데 까다롭지 않으므로 달을 찍기에 충분한 망원렌즈가 있는 분이시라면 도전해보셔도 괜찮을 것 같습니다. ^^

     

     

    book_starryphoto

    "어린왕자의 별자리 여행(저자 : 김상구, 출판사:한승)"이 새로 출간되었습니다.

    이 책의 저자께서 천문노트(http://astronote.org)에서 무료로 제공할 수 있도록 했습니다.
    단, 책을 읽고 인터넷 서점에서 리뷰를 달아주는 조건이 있습니다.

     

    이쁘고 유익한 내용으로 가득한 책이니 한권정도는 소장하시는 것이 좋겠다는 생각을 하네요.
    게다가 이쁜 별자리판도 함께 제공합니다.

     

    일단 선착순으로 제게 메일(jidolstar[at]gmail.com)로 "성명,천문노트 아이디,연락처,주소,우편번호"을 적어주시는 선착순 12명에게 택배(착불)로 보내드립니다.

     

    그리고 메일 보내실때 "책을 읽고 리뷰를 쓸 것에 동의합니다."라는 문구를 꼭 보내주세요.

     위 조건에 맞지 않게 보내주시면 메일을 보내주셨다고 하더라도 보내드릴 수 없고요.

     

    수시로 [여기]에 댓글로 신청하신 분들의 명단을 공개하겠습니다.
    그 뒤에 보내시는 분은 아쉽지만 보내드릴 수 없으니 양해부탁드릴께요.

    리뷰는 아래에 인터넷 서점에 달아주시면 됩니다.

     

    되도록이면 위 인터넷 서점뿐 아니라 다른 곳에도 달아주셨으면 좋겠고요

    블로그 같은거 하시면 그곳에도 올려주시면 감사하겠습니다.

     

    http://starpl.com

     

     지금 스타플에서 당신의 별을 찾아보세요.

     

     

    여기서 다루는 문제는 천문 관련 계산할 때 반드시 숙지하고 있어야할 각도 변환에 관련된 것이다. 매우 기초적인 내용이다. 꼭 천문 계산이 아니더라도 수학계산을 위해 이러한 내용은 잘 알고 있어야 한다.

     

    혹시 다음 값을 어떻게 읽는가?

     

    • 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)로 변경해주어 사람이 보기 편리하도록 만들어주면 되는 것이다.

     

     

    지난번에 “100시간 천문학(100 Hours of Astronomy)” 행사에 대해 글을 적은적이 있다. 행사 마지막날에는 아마추어 천문가들을 중심으로 하는 “거리의 별 축제”가 있었고 천문노트(http://astronote.org)도 이 행사에 참가했다. 천문노트는 서울천문동호회와 함께 서울역에 자리를 잡았다. 이 행사는 전국 각지역에 열렸다.

     

    길을 다니다가 천체망원경을 보고 신기하다듯이 오는 사람이 대부분이였다. 일본사람, 태국사람, 국적 모를 외국인도 흥미를 가지고 다녀갔다. 나는 12인치 돕소니안 천체망원경으로 사람들에게 달과 토성을 보여주었다. 대부분 사람들이 달의 크레이터를 보고 놀라움을 금치 못했다. 이 날 달이 상현달이라 오후 5시에도 보였기 때문에 어렵지 않게 달을 보여줄 수 있었다.

     

    어두워 지면서 서서히 토성이 보이기 시작했다. 사자자리에 위치한 토성은 밝기 때문에 서울시내에서도 충분히 관측이 가능하다. 망원경의 아이피스 안에 아기자기한 토성을 본 사람들은 토성의 고리를 보고 신기해 했다.  정말 토성이 있고 고리가 있구나 하는 모습이였다.

     

    이날 KBS World 라디오 방송에서 이번 행사를 취재해갔다. 방송은 들어보지 않았지만 아마도 사람들에게 별자리를 가르치는 것과 달을 보여주며 설명해주는 내 육성이 공개되지 않았을까 생각한다. ㅎㅎ

     

    그날 교통사고까지 당해서 스트레스성 위산 과다분비로 인해 속이 쓰려 매우 컨디션이 좋지 않았지만 많은 사람들에게 별을 보여줬다는 좋은 추억을 만들 수 있어서 나름 기분은 좋았다.

     

     

     

    아이한테 별을 보여주는 모습. 옆에 이어폰 낀 여자분은 KBS World 라디오 기자분이다.

     

     

    12인치 돕소니안이다. 지금은 레이저 콜리메이터를 이용해 광축을 맞추고 있는 모습

     

     

     

    달과 토성을 본 사람들에게 저렇게 봤던 대상을 붙이고 자신의 이름이나 메시지를 적는 행사도 곁들였다.

     

     

     

    쌍안경을 이용해 달을 보는 아이. 많은 사람들이 달을 보려면 큰 망원경이어야 한다고 생각하지만 저렇게 쌍안경으로도 충분히 행성 및 성단, 달을 관측할 수 있다.(태양은 금물! 실명될 수 있음)

     

     

     

    굴절망원경을 통해 달을 보는 모습

     

     

     

    이날 초 대박 작품인 별지도. 여고 학생들이 저렇게 만들었다 야광별을 일일히 붙이고 별자리 선까지 그려주고 메시에 목록(성운,성단,은하 목록) 사진도 붙인 작품을 가지고 나왔다. 학생들의 열정에 박수를 보낸다.

     

     

     

    행사를 준비하는 중

     

     

     

    서울천문동호회 분이 가지고 계신 망원경. 적도의 EM-11 뽀대가 제대로다. 시상도 매우 깔끔했다.

     

     

    서울역에서 별을 보여주는 모습. 오른쪽 하단에 보이는 큰 망원경은 16인치 돕소니안이다. 열심히 달을 맞추고 계신다. ^^;;

     

     

     

    갈릴레오가 망원경으로 우주를 관측한지 400주년을 맞이하여 올해는 “2009 세계천문의 해”로 지정되었다. 이를 기념하여 100시간 천문학(100 Hours of Astronomy) 행사가 현재 진행중에 있다.

     

     

     

    이 행사는 “2009 세계 천문의 해'”를 대표하는 행사로 별 관측을 통해서 일반시민들이 우주에서 스스로의 위치를 지각하도록 하는 것을  목표로 삼고 있다. 이 행사는 4월 2일부터 5일까지 진행하며 세계적으로 매우 다채로운 천문행사를 진행중이다.

     

    국내에서는 다음과 같은 행사가 진행중이다.

     

    • 2009년 4월 2일 : 7개 대학 캠퍼스 별 축제
    • 2009년 4월 3일~4일 : ‘시민 천문대의 밤’ 개최
    • 2009년 4월 4일 : ‘과학관의 밤’ – 국립중앙과학관, 국립과천과학관
    • 2009년 4월 5일 : ‘거리의 별 축제’ – 아마추어 천문가들의 중심으로 이뤄짐

    필자가 속해있는 천문노트(http://astronote.org)는 4월 5일 오후 3시부터 10시까지 서울역 광장에서 '거리의 별 축제'에 참가한다. 천문노트 뿐 아니라 각종 다른 천문동호회도 참가할 것이다.

     

    자세한 국내 행사 내용은 아래 링크를 참고한다.

     

    http://www.astronomy2009.or.kr/archive/calendar/20090402_125320/20090402_125320.aspx

     

    인터넷 생중계

    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시간

     

    링크

     

     

    [팔렸습니다.]

     

    2년간 사용했던 미드사의 라이트브릿지 트러스트 돕소니안 16인치 천체망원경을 판매합니다. 결혼하면서 가지고 다니기 어렵고 집안에서 관리하기가 여의치 않아서 판매하고자 합니다.

    몇번의 관측으로 생활기스는 약간 있습니다.

     

    망원경에 대한 자세한 아래 링크를 참고하세요.

     

    http://sky39.com/shop/mart5/mall.php3?query=view&no=3149

     

    구입 희망 가격 생각하시고 아래 연락처로 연락주세요.

    구입 문의는 아래로 해주세요.

     

    • Email : jidolstar [at] gmail.com
    • Phone : 공일공-2018-0321

     

    크기 문제로 택배 배송은 불가하오니 직접 가져가셔야합니다. 장소는 서울 송파입니다.

     

     

     

    평상시에 보관하는 모습입니다. 구입시 포장박스에 있던 스티로폼을 그대로 사용했습니다. 저렇게 보관하니깐 공간이 활용이 됩니다.

     

     

    위 사진은 차로 이동할 때 모습입니다. 스티로폼을 이용하면 저렇게도 가져갈 수 있습니다. 일반 승용차의 경우에는 아래 판을 분리하는 수 밖에 없습니다.

     

     

     

    사경부와 주경부 입니다.

     

     

    번들로 들어가 있던 등배파인더입니다.


     
    번들로 있는 26mm 아이피스와 냉각팬을 돌리기 위한 건전지 케이스 및 다른 부속품입니다.

     

     

     

    왼쪽은 망원경을 조립할 때 쓰는 트러스트입니다. 지금껏 비닐로 쌓아 두어서 트러스트의 봉에는 기스가 거의 없습니다.

     

     

     

    토성(Saturn)은 태양으로 부터 목성 다음으로 먼 행성이다. 지구에서 바라볼 때, 토성의 고리는 14~15년 주기로 기울기가 커졌다 작아졌다 한다. 토성의 고리는 아마추어 천체 관측가 뿐만아니라, 일반인들에게도 매우 흥미로운 모습을 보여준다. 작은 천체망원경만 가져도 토성의 고리를 확인할 수 있다. 별자리를 공부한 다음에 행성의 위치를 알게되는데 그때 망원경으로 관측하는 대상이 금성,목성 다음으로 토성이 아닐까 싶다.

    토성의 밝고 아름다운 고리는 기울기가 감소함에 따라 대구경 천체망원경 조차도 관측하기 어려울 정도가 된다. 아쉽게도 현시점에서 토성의 고리는 점차 기울여지고 있으며 그 아름다운 고리는 보기 어려워지게 될 것이다.

     

    하지만 너무 아쉬워할 필요는 없다. 토성의 고리를 못보는 대신 토성의 고리로 인해 안보이던 토성 위성의 토성면을 통과하는 매우 흥미로운 모습을 관측할 수 있을 것이니 말이다. 위 사진은 바로 그 모습을 보여주고 있다. 위 사진은 지난 2월 24일에 허블우주망원경(HST)이 찍은 사진이다. 위 사진에서 토성의 위성중 4개의 위성을 볼 수 있다. 가장 큰 위성은 토성에서 가장 큰 위성인 타이탄(Titan)이다. 가장 좌측에는 엔셀라두스(Enceladus)와 그의 그림자, 그 다음 좌측에는 디오네(Dione)과 그의 그림자이다. 우측 토성의 디스크 표면에 작은 점은 미마스(Mimas)이다. 타이탄과 미마스의 그림자는 토성표면 밖에 있어서 사진상에는 나오지 않았다.

     

    토성의 적도 지름은 약 120,000 Km로 지구의 약 9배 이상이다. 부피도 지구의 760배에 달하지만 질량은 95배 밖에 안되기 때문에 토성의 평균밀도는 0.7g/cm3으로 토성을 담을 충분한 물이 있다면 물에 뜰 정도이다.

    토성의 아름다운 고리는 얼마동안 보지 못할 것이지만 위성의 통과 모습을 망원경을 통해 볼 수 있지 않을까 기대감을 가지게 된다.

     

    사진 및 내용의 출처 : http://antwrp.gsfc.nasa.gov/apod/ap090319.html

     

     

     

     

    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인치 구경의 망원경으로 보더라도 아주 어두운 약간의 얼룩정도로만 확인할 수 있을 것이다. 본인도 아주 날씨 좋은 날, 딱 한번밖에 본적이 없는 이 성운은 그리 많이 관측되는 대상은 아니다. 하지만 직접 보고 사진으로 담아내는데 매력적인 성운이 아닐까 생각된다.

     

    참고할만한 글

    + Recent posts