Python으로 만든 중력 시뮬레이션
개강도 얼마 안남았고 하루하루를 게임과 인터넷 서핑으로 무료하게 보내다가 오랜만에 나름 생산적인 일을 하기로 했다. 오늘의 유머에서 어떤 사람이 제작한 생태계 시뮬레이션에 대한 글 을 보고 갑자기 아무거나 코딩을 하고 싶다는 생각이 들었고 뭘 만들까 고민하다가 중력 시뮬레이션을 만들기로 했다. 물론 내가 유일하게 제대로 할 수 있는 언어인 파이썬으로 :D 물체 구현 종강한지 꽤 되어서 다 잊어버리지 않았을까 걱정했는데 다행히 전에 짰던 코드를 좀 보니까 웬만큼 기억이 났다. 객체지향, 클래스, 메쏘드, 어쩌구... 파이썬 짱짱맨! 복잡한 물체의 중력을 구현하긴 귀찮으므로 (메모리의 문제도 있고 내 코딩 실력의 문제도 있고) 모든 물체는 구형으로 (사실은 원형으로) 통일하기로 했다. 그래픽 구현 모듈로는 파이썬 내장 기본 모듈인 tkinter을 사용했다. 각 물체에 해당되는 클래스인 Object 클래스를 만들어서 ( 객체 object와 혼동된다면 기분탓 ) 위치, 속도, 질량, 반지름, 색을 입력받는다. 하다보니 벡터 클래스가 필요할 듯 싶어 하나 만들었다. 일단 초기 위치에 물체를 그리고 매 time interval마다 속도에 따라 일정 거리만큼 움직이도록 하엿다. 중력 구현 매 interval마다 중력을 계산해서 가속도를 계산하고 속도를 계속 업데이트 하도록 하였다. 중력을 계산하는게 은근 고역이었는데, 실제 상황과 최대한 비슷하게 만들고 싶다는 되도 않는 욕심이 생겼기 때문이었다. 한 픽셀을 0.01 AU, 시뮬레이션 상에서 1초가 실제로 30일이라고 정했고 질량 단위로는 지구의 질량을 사용하기로 했다. 그에 따라서 중력 상수를 다시 계산했는데 물리 공부 안한지 오래 되어서 그런가 이 간단한게 왜이렇게 계산이 안되는지... 자다가 일어난 직후에 바로 해서 그런 것 같다. 다음은 태양-지구 시뮬레이션. 참고로 실제 조건과 거의 일치한다. 그런데 문제가 발생했다. 두 물체가 매우 가까이 접근하면 다음과 같은 물리적으로 말이 안되는 이상한 현상이 나타나는 것이...