Daybreakin Things

Posted
Filed under 컴퓨터

이번 학기 듣는 수업 중에 전산물리학개론이라는 과목이 있다. 물리과에서도 아주 괴짜로 소문난(?) 모 교수님의 수업인데, 보통 전산물리학이라고 하면 수치해석적 기법들에 대해 다루지만 이 수업은 자기가 모델링한 것이나 기존 이론들을 컴퓨터로 ‘재빠르게’ visualize함으로써 어떤 insight를 빨리 얻는 것을 목표로 하고 있다.

이 과목에서는 각자 개인별로 주제 발표를 하나씩 해야 하는데, 전산물리학 수업 시간에 배운 기법들을 동원하여 어떤 물리적 현상에 대한 것을 다루는 것이다. 수업 시간에 지금까지 배운 것들은 Excel, Excel+VBA, Visual Basic 6.0, VC++ MFC를 모두 약간씩 맛보았으니(교수님의 모토가 ‘필요한 것만 그때그때 배워서 쓰면 된다’라서 그냥 닥치고 따라해보기 식의 수업이다-.-) 그 중에서 무엇을 고를 것인가가 문제다.

나는 초등학교 6학년때부터 중학교, 고등학교때까지도 많이 썼던 Visual Basic 6.0을 골랐다. Java나 Python 같은 OOP 언어로 짜다가 오랜만에 VB6으로 프로그램을 짜보니 갑자기 왤케 안 되는 것이 많던지.. (VB도 OOP 언어이지만 언어적 기능이 다소 딸리는 편이다.) 연산자 재정의라든가 오브젝트 생성시 인자 넘기는 것이라든가 안 되는 것이 좀 있었지만 어쨌든 프로그램은 금방 짤 수 있었다.

내가 잡은 주제는 그 유명한 만델브로트 집합. 워낙 유명한 거라서 카오스의 ‘카’ 자라도 들어봤다면 다들 한번쯤 본 적이 있을 바로 그 그림이다.; 프로그램 짜놓고 혼자 감상하면서, 정말이지 어떻게 그런 간단한 식으로부터 그런 복잡하고 아름다운 그림이 나오는지 신기했다.

User inserted image

저 몇 줄 안 되는 코드로 이런 그림을 그릴 수 있다.

사실 이 프로그램을 중학교 때 한 번 짜려고 시도했던 적이 있는데, 그때는 Picture Box와 복소 평면 사이의 좌표변환 개념을 제대로 이해하지 못해서 중도에 그만두었던 기억이 있다.

요즘 수리물리 시간에 Complex Analysis에 대해 배우고 있는데, 복소수의 세계는 정말 오묘하다. 특히 conjugate를 취한 z*를 z와 서로 다른 변수로 취급할 수 있다는 사실과, 복소함수의 singularity들을 보면서 추상화와 일반화의 힘이 어떤 것인가 체험하고 있다.

아무튼 결론은 잡담이었다는 것과 전산물리 발표 잘 끝났으면 좋겠다는 거.

그림 추가 : 결국 말려서… 색깔 기능까지 업그레이드! -_-

User inserted image

Julia 집합. Multiple color scale을 적용한 것으로 왼쪽으로 갈수록 확대된 것이다.

User inserted image

Mandelbrot 집합에서, 1pixel = 10E-12 정도로 확대했을 때 나타나는 Julia 집합.