윈도우 화면보호기 중에 화면에 채워진 물방울이 서로 부딪히면서 움직이는 화면이 있는데, 오래 전부터 이와 같은 시뮬레이션을 만들고 싶었다. 마음은 있었으나 많은 객체가 충돌하는 다양한 경우를 통찰하지 못해 엄두를 내지는 못했다. 그런데 지난 이중 진자, 삼중 진자를 만들 수 있는 계기가 되었던 웹사이트 myPhysicsLab.com에서 당구 시뮬레이션을 보던 중에 충돌 방법(collision method)을 선택하는 것에 눈길이 갔다. 충돌 방법이 하나가 아니라 다양할 수 있다는 것 자체가 놀라웠다. 그런데 충돌방법이 어차피 다양하다면 그냥 (위키백과에 따르면) 두 원판의 탄성 충돌은 한 방법 뿐이니 그냥 두 원판의 탄성 충돌만 인식하는 방법으로 여러 원판이 충돌하는 시뮬레이션을 만들었다.
설명
- reset : 각 원판의 위치와 속도를 임의로 정한다. 메트로놈 모양의 재생 버튼을 클릭하여 시뮬레이션을 멈추고, 원판이 서로 겹치치 않는 위치가 될 때까지 reset을 반복한 다음 다시 메트로놈 모양의 재생 버튼을 클릭하면 시뮬레이션이 실행된다.
- ready : 점선으로 된 운동에너지 총합 표시선을 중앙 실선으로 재배치한다. 이 시뮬레이션은 원판이 두 벽에 동시에 닿거나, 세 원판이 동시에 닿는 상황을 인식하지 못하므로 그러한 상황에는 운동에너지의 총합이 처음 운동에너지의 총합과 달라진다. 다시 말해 운동에너지가 보존되지 않는다. 그럴 경우 달라진 운동에너지 총합을 다시 처음 운동에너지의 총합으로 삼는 버튼이다.
- n : 원판의 개수이다. 개수가 늘어나면 reset을 거듭해도 원판이 겹치지 않기가 어려운데 이럴 경우 화면의 초록색 직사각형 우측 상단의 점을 드래그하여 직사각형을 키울 수 있다.
- speed : 원판의 속력은 구간 \(\left(-\cfrac{s_{peed}}{2}, \cfrac{s_{peed}}{2}\right)\) 사이에서 임의로 정해진다.