함께 만드는 별빛 세상, 천문노트 · Since 2001

[천문학 프로그래밍]MatriXsLib 1.0

이형철 2003-06-15 (일) 02:47 849 6
목록
이전글 다음글
  • Astroview_0.2.5.zip
  • MatriXsLib.zip
  • snapshot.gif

MatriXsLib은 천문학 프로그래밍을 위한 많은 함수들을 구현해놓은 범용 라이브러리 입니다. 먼저 여기 에서 MatriXsLib 1.0 Source code를 다운로드 받으세요.

각 class에 대한 설명

시간 관련 class

class 이름 설명

Date

날짜를 나타낸다.

내부적으로 저장되는 변수의 값은 자정의 Julian day 값이 저장되므로 반드시 .5로 끝나야 한다.

Time

시간을 나타낸다.

DateTime

Date와 Time class를 묶은 class이다.

어떤 지역의 어떤 시간(LCT, UT, LST, GST)인지는 상관하지 않으며 단지 어떤 한 순간만을 나타낸다. 이 클래스는 사실 천문학적으로는 JD를 나타내는 class이다.

LCT : DateTime

Local Civil Time

UT : DateTime

Universal Time

GST : DateTime

Greenwich Sidreal Time

LST : DateTime

Local Sidreal Time


좌표계 관련 class

class 이름 설명

Vector

3차원 벡터를 나타낸다.

주로 Coordinate가 변환되어 사용되므로 크기는 1이 될 것이다.

Coordinate

2차원 구면 좌표상의 좌표이다.

Horizon : Coordinate

지평 좌표계

Equatorial : Coordinate

적도 좌표계

Ecliptic : Coordinate

황도 좌표계

Galactic : Coordinate

은하 좌표계

Matrix

3차원 벡터와의 곱이 가능한 Matrix이다.

천문학 적인 좌표 변환은 모두 이 class를 이용해 이루어진다.


천문학적인 위치 계산을 위한 class

class 이름 설명

Sun

태양의 위치 계산

Moon

달의 위치 계산

Planet

행성의 위치 계산

데이터 from http://ssd.jpl.nasa.gov

계산 방법은 from http://home.tiscali.se/~pausch

밝기와 반지름에 관한 정보는 practical astronomy with your calculator

Mercury : Planet

수성의 위치 계산

Venus : Planet

금성의 위치 계산

Earth : Planet

지구의 위치 계산

Mars : Planet

화성의 위치 계산

Jupiter : Planet

목성의 위치 계산

Saturn : Planet

토성의 위치 계산

Uranus : Planet

천왕성의 위치 계산

Neptune : Planet

해왕성의 위치 계산

Pluto : Planet

명왕성의 위치 계산

Comet : Planet

혜성의 위치 계산

Asteroid : Planet

소행성의 위치 계산


기타 class

class 이름 설명

Util

계산에 필요한 각종 static 함수들을 집어 넣어둔다.

예를 들어 sqrt, cbrt, normalize, ftoi, rad2deg, deg2rad 등이 들어있다.


사용법 및 예제

모든 헤더 파일은 MatriXsLib.h 안에 들어있습니다.
우리 라이브러리 사용하실 분들은
#include MatriXsLib.h
하신 다음 그냥 각종 클래스들을 사용하시면 됩니다.(쉬워요!)


다운로드 받으셔서 Visual C++에서 연 다음에
MatriXsLib.cpp 파일에 있는 main()
함수를 띄워서 예제를 보시면 됩니다.


Visual C++에서 관련된 class를 누르시면 함수와 멤버들을 확인할 수 있습니다.
우리 프로젝트도 이파일을 기준으로 해서 확장하도록 하죠


그럼 소스 코드 나갑니다.

#include "MatriXsLib.h" 

void main() 
{ 
/*************** 
JD를 계산하는 예 
***************/ 
DateTime dt(2003, 7, 10, 6, 0, 0); 
double jd = dt.GetJD(); 

/****************************************** 
UT나 GST, LST 등을 직접 알 때 선언하는 방법 
******************************************/ 
// LCT를 하나 선언 
LCT lct(2003, 7, 10, 6, 0, 0); 

// GST를 하나 선언함, 위에서 구한 jd를 사용 
GST gst(jd); 

/******************************* 
LCT, GST, UT, LST 간의 변환 방법 
*******************************/ 
// 위치를 하나 선언 
Location loc(Util::deg2rad(127.0), Util::deg2rad(37.0), +9.0); 

// LCT로부터 UT를 구함 
// 이 때 GMT와의 차이가 필요한데 위에서 선언한 loc 변수를 사용함 
UT ut(lct, loc.m_dgmt); 

// UT로부터 GST를 구함 
GST gst2(ut); 

LST lst(gst, loc.m_lon); 

// 이 모든 것을 한 줄로 할 수 도 있음 
LST lst2(lct, loc.m_dgmt, loc.m_lon); 

/********************* 
좌표계를 선언하는 방법 
*********************/ 
// 고도 방위각으로부터 직접 horizon coordinates를 선언 
Horizon hor(Util::deg2rad(6.0), Util::deg2rad(0)); 

// 적경, 적위값으로부터 직접 equatorial coordinates를 선언 
Equatorial equ(Util::deg2rad(6.0), Util::deg2rad(0)); 

// 황경, 황위로부터 직접 ecliptic coordinates를 선언 
Ecliptic ecl(Util::deg2rad(6.0), Util::deg2rad(0)); 

// 은경, 은위로부터 직접 galactic coordinates를 선언 
Galactic gal(Util::deg2rad(6.0), Util::deg2rad(0)); 

/******************* 
좌표계간의 변환 방법 
*******************/ 
// 적도 좌표계로부터 지평 좌표계를 얻어옴 
Equatorial equ2(hor, lst, loc.m_lat); 

// euqatorial 좌표계에서 세차를 보정하는 방법 
equ2.CorrectPrecession(2000, 1875); 

/*********************************** 
Matrix를 이용한 좌표계간의 변환 방법 
***********************************/ 
// 변환 행렬을 얻어옴 
Matrix mat1 = Matrix::Ecl2Equ(ut); 
Matrix mat2 = Matrix::Equ2Hor(lst, loc.m_lat); 

// 합성 변환을 만듬 
Matrix mat = mat1 * mat2; 

// 드디어 변환 
Horizon hor3 = mat * equ; 

/************************** 
태양의 위치를 계산하는 방법 
**************************/ 
// 특정 시간의 태양을 생성, 모든 계산은 이 때 행해짐 
Sun sun(ut); 

// 지구 중심의 위치를 얻어옴, 즉, 현재 지구의 위치를 계산해서 뺌 
Vector pos = sun.GetPositionG(); 

// 태양 중심의 위치를 얻어옴(항상 0, 0, 0) 
Vector pos2 = sun.GetPositionH(); 

// GetPositionG와 GetPositionH 등의 함수는 
// 제가 잘못 생각하고 설계한 것입니다. 
// 모든 위치는 자신이 공전하고 있는 것을 중심으로 계산하는게 좋을 듯 합니다. 

/************************ 
달의 위치를 계산하는 방법 
************************/ 
// 특정 시간의 달을 생성, 모든 계산은 이 때 행해짐 
Moon moon(ut); 

// 지구 중심의 위치를 얻어옴 
Vector pos3 = moon.GetPositionG(); 
} 

댓글 6

지도리2003-06-18 04:00
정말 보기좋게 프로그래밍 해놯네^^
ㅋ2003-09-08 08:00
ㅋㅋ
허승재2003-10-23 02:00
수고 많으셨습니다. 기회가 된다면 직접 참여하고 싶군요.
내공을 더욱 쌓고 참여하도록 하겠습니다.
조용재2004-01-23 01:00
죽인다 저도 내공을 좀더 쌓은 담에 ...
유동일2004-07-12 06:00
와..대단하시다..
2004-07-13 02:00
여기 천문사이트 맞나;;?

로그인하면 댓글을 쓸 수 있습니다.

천문노트 옛 노트 (2002~2005)

총 323건
번호제목글쓴이날짜조회
203 MatriXsLib 1.0+6 이형철06-15850
201 관련사이트+2 이형철05-20539
200 극축 맞추기+5 이형철05-201107
199 Step Motor의 제어+9 이형철05-204786
198 사이토구니치의 古天文學+3 이형철05-14141
197 천문 현상에 관련된 용어 정리+3 이형철04-101026
196 그리스 신화+2 이형철03-09142
194 별자리 익히기+14 지용호02-23986
193 별자리 공부+6 지용호02-23628
192 겨울철 별자리 관측 김현기02-1236
글쓰기