본문 바로가기

파이썬

파이썬으로 별자리판 만들기(1)

별자리판이란 관측하고 싶은 날짜와 시각에 눈금을 맞춤으로써

그때의 별자리 배치를 쉽게 알 수 있도록 한 기구이다.

 

내가 우주와 별들에 대해 관심을 가지게 되고 나서 제일 먼저 해보고 싶은 던 일이다.

나라는 티끌같은 존재는 도대체 이 광막한 우주 어디에 살아가고 있는 것인가?

우선 내가 밟고 있는 이곳과 여기서 관찰할 수 있는 자연현상을 알아야 한다. 

그래서 물론 굉장히 단순화하고 대략적이긴 하지만,

해와 달 그리고 무수한 별들이 뜨고 지는 반복적인 자연의 현상을 그래픽으로 구현해 보고 싶었다!

나 같이 일반인도 쉽게 이해할 수 있을 정도의 수준(고등학교 수학)으로

내가 파이썬을 활용하여 공부한 별자리 원리와 구현을 여러분과 공유해 보고자 한다.

 

1. 기본적인 수식

  ㅇ 회전변환행렬 : [[cos(th), -sin(th)], [sin(th), cos(th)]]

  ㅇ 구좌표계 : [r, theta, phi]

  ㅇ 적도좌표계 : [right ascension(적경 h), declination(적위 °)]

2. 단순화 및 가정

  ㅇ 먼 우주에서 지구를 봤을때, 지구의 자전축 연장선에서 북극성이 있는 위쪽을 z축방향으로 한다

  ㅇ 태양은 고정이고, 지구는 z축에 반시계방향으로 자전과 공전을 한다

  ㅇ 지구 자전축의 세차운동은 없다고 가정한다

  ㅇ 춘분점에서 태양->지구 연장벡터가 x축, z축에 수직하고 x축을 90° 회전한 벡터가 y축이다

      (즉 x축의 적경은 12h 이고 y축의 적경은 6h이다.)

  ㅇ 별들은 지구에서 아스라이 멀리 떨어져있다

  ㅇ 별들이 뜨는 곳이 동쪽이고 지는 곳이 서쪽이다

3. 프로세스 해석

  ㅇ 예시로 천정을 내가 살고 있는 오송 위도(36.63°)에서 적위, 시리우스(6h45')가 남중하는 때의 적경으로 잡는다

      (즉 내가 살고 있는 곳에서 시리우스가 남중한 때 별자리판을 보게될 것이다)

  ㅇ 천정에서 90° 차이나는 별자리들만 추려서 이 별들을

      z축으로 적경만큼, y축으로 적위만큼 순서대로 역회전을 잡아돌린다

      그러면 천정은 z축으로 이동하고 별들도 천정을 중심으로 반구가 그대로 이동된다

  ㅇ 이렇게 이동하게 된 별자리들 x, y, z 좌표로 부터 우리는 지평좌표계(고도, 방위각)을 얻을 수 있다.

  ㅇ z 좌표를 버리고 x, y 좌표를 가지고 그래픽으로 뿌리면 두둥~ 별자리판 완성!!!

  ㅇ 단 plot 할때 지구에서 우주를 바라보는 시점으로 바꿔야하므로 가로축은 반전!!!

 

파이썬 별자리판

화려하진 않지만 시리우스가 포함된 겨울철 육각형이 똭!ㅎㅎㅎ

스텔라리움와 유사한 것으로 셀프검증을 마친다.

소스코드는 첨부물을 참고하시기를,,,

plt_planishere.py
0.00MB
NexStarObjects.db
0.98MB

조금 더 응용하면 별자리판 애니메이션과 태양, 행성들을 추가해 넣을 수도 있고

(아직 보완해서 나중에 2편을 쓸 예정이다)

심화응용하면 image solver도 어설프게 가능할 것 같다.

21.01.15. 파이썬 별자리판 애니메이션

아~ 내가 조물주가 된 것 마냥 우주를 동작시키다니,,,ㅎㅎㅎ