MatriXsLib은 천문학 프로그래밍을 위한 많은 함수들을 구현해놓은 C++ 라이브러리 입니다. 먼저 여기 에서 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"
// LCT를 하나 선언
LCT lct(2003, 7, 10, 6, 0, 0);
// 위치를 하나 선언
Location loc(Util::deg2rad(127.0), Util::deg2rad(37.0), +9.0);
// 고도 방위각으로부터 직접 horizon coordinates를 선언
Horizon hor(Util::deg2rad(6.0), Util::deg2rad(0));
// 적도 좌표계로부터 지평 좌표계를 얻어옴
Equatorial equ2(hor, lst, loc.m_lat);
// 변환 행렬을 얻어옴
Matrix mat1 = Matrix::Ecl2Equ(ut);
Matrix mat2 = Matrix::Equ2Hor(lst, loc.m_lat);
// 특정 시간의 태양을 생성, 모든 계산은 이 때 행해짐
Sun sun(ut);
// 특정 시간의 달을 생성, 모든 계산은 이 때 행해짐
Moon moon(ut);
우리 라이브러리 사용하실 분들은
#include MatriXsLib.h
하신 다음 그냥 각종 클래스들을 사용하시면 됩니다.(쉬워요!)
다운로드 받으셔서 Visual C++에서 연 다음에
MatriXsLib.cpp 파일에 있는 main()
함수를 띄워서 예제를 보시면 됩니다.
Visual C++에서 관련된 class를 누르시면 함수와 멤버들을 확인할 수 있습니다.
우리 프로젝트도 이파일을 기준으로 해서 확장하도록 하죠
그럼 소스 코드 나갑니다.
#include "MatriXsLib.h"
void main()
{
DateTime dt(2003, 7, 10, 6, 0, 0);
double jd = dt.GetJD();
{
DateTime dt(2003, 7, 10, 6, 0, 0);
double jd = dt.GetJD();
// LCT를 하나 선언
LCT lct(2003, 7, 10, 6, 0, 0);
// GST를 하나 선언함, 위에서 구한 jd를 사용
GST gst(jd);
GST gst(jd);
// 위치를 하나 선언
Location loc(Util::deg2rad(127.0), Util::deg2rad(37.0), +9.0);
// LCT로부터 UT를 구함
// 이 때 GMT와의 차이가 필요한데 위에서 선언한 loc 변수를 사용함
UT ut(lct, loc.m_dgmt);
// 이 때 GMT와의 차이가 필요한데 위에서 선언한 loc 변수를 사용함
UT ut(lct, loc.m_dgmt);
// UT로부터 GST를 구함
GST gst2(ut);
GST gst2(ut);
LST lst(gst, loc.m_lon);
// 이 모든 것을 한 줄로 할 수 도 있음
LST lst2(lct, loc.m_dgmt, 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));
Equatorial equ(Util::deg2rad(6.0), Util::deg2rad(0));
// 황경, 황위로부터 직접 ecliptic coordinates를 선언
Ecliptic ecl(Util::deg2rad(6.0), Util::deg2rad(0));
Ecliptic ecl(Util::deg2rad(6.0), Util::deg2rad(0));
// 은경, 은위로부터 직접 galactic coordinates를 선언
Galactic gal(Util::deg2rad(6.0), Util::deg2rad(0));
Galactic gal(Util::deg2rad(6.0), Util::deg2rad(0));
// 적도 좌표계로부터 지평 좌표계를 얻어옴
Equatorial equ2(hor, lst, loc.m_lat);
// euqatorial 좌표계에서 세차를 보정하는 방법
equ2.CorrectPrecession(2000, 1875);
equ2.CorrectPrecession(2000, 1875);
// 변환 행렬을 얻어옴
Matrix mat1 = Matrix::Ecl2Equ(ut);
Matrix mat2 = Matrix::Equ2Hor(lst, loc.m_lat);
// 합성 변환을 만듬
Matrix mat = mat1 * mat2;
Matrix mat = mat1 * mat2;
// 드디어 변환
Horizon hor3 = mat * equ;
Horizon hor3 = mat * equ;
// 특정 시간의 태양을 생성, 모든 계산은 이 때 행해짐
Sun sun(ut);
// 지구 중심의 위치를 얻어옴, 즉, 현재 지구의 위치를 계산해서 뺌
Vector pos = sun.GetPositionG();
Vector pos = sun.GetPositionG();
// 태양 중심의 위치를 얻어옴(항상 0, 0, 0)
Vector pos2 = sun.GetPositionH();
Vector pos2 = sun.GetPositionH();
// GetPositionG와 GetPositionH 등의 함수는
// 제가 잘못 생각하고 설계한 것입니다.
// 모든 위치는 자신이 공전하고 있는 것을 중심으로 계산하는게 좋을 듯 합니다.
// 제가 잘못 생각하고 설계한 것입니다.
// 모든 위치는 자신이 공전하고 있는 것을 중심으로 계산하는게 좋을 듯 합니다.
// 특정 시간의 달을 생성, 모든 계산은 이 때 행해짐
Moon moon(ut);
// 지구 중심의 위치를 얻어옴
Vector pos3 = moon.GetPositionG();
}
Vector pos3 = moon.GetPositionG();
}