8월, 2014의 게시물 표시

Python으로 만든 중력 시뮬레이션

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

마법소녀 드라마 꿈

오늘 꿈에서 어떤 새로 나온 드라마의 1화를 봤는데, (사실 드라마라기 보다는 웹툰과 드라마 사이의 어중간한 형태였다) 깨어나서 생각해보니 그 내용이 엄청 생생했다. 등장인물들의 얼굴과 장면 하나하나가 정말 생생히 기억났다. 신기한건 꿈에서 나온 것 치고 꽤 짜임새도 있었고 난생 처음 보는 내용이었다는 것이다. 다음은 그 내용을 대략적으로 정리한 것. 주인공은 마법소녀. 그리고 평범한 고시생이다. 이중 생활을 하고 있다. 어느 날 그녀는 교통사고를 목격하는데, 이상하게 주위에는 아무도 없고 구급차도 오지 않는다. 위급함을 느낀 마법소녀는 구급차를 훔쳐서 통째로 들고 날아서 가져온다. 왜 119에 신고할 생각을 안했지. 하지만 이미 늦은 상태다. 이상하게 이런 일이 몇번이고 반복되어 일어난다. 마법소녀는 매번 구급차를 훔쳐서 상황을 해결하려고 노력하지만 이미 늦은 상태이다. 밖에서는 구급차를 매번 훔쳐가는 사람을 찾느라 비상이 걸려 있다. (아마 주인공은 훔친 구급차를 다시 가져다 놓지는 않나보다.) 그러다가 주인공은 교통사고 현장에 실수로 지문을 남기게 되고 수사관이 그 지문을 발견한다. 그리고 그 지문의 주인이 그녀라는 사실이 밝혀지고 세상에 알려지게 된다. (물론 마법소녀라는 것은 알려지지 않은 상태) 한편, 주인공이 고시원에서 알고 지내던 언니들은 그녀는 절대 그럴 사람이 아니라고 생각한다. 그런데 그들 중 한명이 그녀에 대해 한 가지 이상한 점이 있다고 그러면서, 그녀가 전에 그들에게 진지하게 소원이 있냐고, 자신이 들어주겠다고 말했던 것을 언급한다. 그러는 와중에 그녀는 자신이 살고있는 자취방에서 나가려고 짐을 챙기고 있다. 일단 수사관들의 눈을 피해야 하기도 했고 다른 사람에게 피해를 입히기 싫었기 때문이다. 공대생이었던 그녀는 울면서 책장에서 옮길 책을 하나하나 확인한다. "매스매티카.. 매트랩.."