물체의 운동과 충돌은 물리 시뮬레이션의 기본 개념 중 하나이며, 동역학과 힘의 상호작용을 통해 현실세계의 물체 움직임을 컴퓨터로 모사한다. 이를 위해 뉴턴의 운동 법칙, 충돌 이론, 에너지 보존 법칙 등을 바탕으로 한다. 이번 섹션에서는 각각의 개념 및 이를 구현하는데 필요한 기본적인 수학적 공식들을 소개한다.
뉴턴의 운동 법칙
물리 시뮬레이션에서 가장 기본이 되는 이론은 뉴턴의 운동 법칙이다. 이는 세 가지로 나누어진다.
제1법칙 (관성의 법칙)
먼저, 외부의 힘이 작용하지 않는 한, 물체는 계속해서 현재의 상태(정지 또는 일정한 속도)로 운동을 계속한다.
제2법칙 (가속도의 법칙)
어떤 물체에 힘이 가해지면, 그 물체는 그 힘에 비례하여 가속도가 생깁니다. 수식으로는 다음과 같이 표현된다:
여기서, - \mathbf{F}는 힘 벡터 - m은 질량 - \mathbf{a}는 가속도 벡터이다.
제3법칙 (작용과 반작용의 법칙)
모든 작용에는 그에 상응하는 반작용이 있다. 한 물체가 다른 물체에 힘을 가하면, 두 번째 물체는 첫 번째 물체에 크기가 같고 방향이 반대인 힘을 가한다.
운동 방정식
뉴턴의 제2법칙을 이용하여 시간에 따른 물체의 운동을 예측할 수 있다. 만약 \mathbf{F} = m\mathbf{a}를 시간에 대하여 적분하면, 위치 \mathbf{x}와 속도 \mathbf{v}를 구할 수 있다.
속도와 가속도의 관계:
위치와 속도의 관계:
여기서, - \mathbf{v_0}와 \mathbf{x_0}는 각각 초기 속도와 초기 위치이다.
충돌
충돌은 두 물체가 서로 부딪히는 상황을 말하며, 이 때 물체의 운동은 급격하게 변한다. 충돌 문제를 해결하기 위해 여러 가지 기법이 있다. 여기서는 대표적인 충돌 처리 방법들을 다룬다.
탄성 충돌
탄성 충돌에서는 물체 간의 운동 에너지와 운동량이 모두 보존된다. 두 물체가 충돌 후 새로운 속도를 가지는 경우 다음 공식을 사용한다.
운동량 보존:
운동 에너지 보존:
여기서, - m_1, m_2는 충돌하는 두 물체의 질량, - \mathbf{v_1}, \mathbf{v_2}는 충돌 전의 속도, - \mathbf{v_1'}, \mathbf{v_2'}는 충돌 후의 속도이다.
비탄성 충돌
비탄성 충돌에서는 운동량은 보존되지만, 운동 에너지는 보존되지 않는다. 일부 운동 에너지가 소리, 열 에너지 등으로 변환되기 때문이다. 특별히 완전 비탄성 충돌의 경우, 충돌 후 두 물체는 함께 움직이며 하나의 속도를 갖는다.
운동량 보존:
여기서, \mathbf{v_f}는 충돌 후의 공동 속도이다.
충돌 처리 알고리즘
물리 엔진에서 충돌을 처리하기 위해 다양한 알고리즘이 적용된다. 여기서는 충돌 감지와 충돌 응답 두 가지 주요 단계로 나눌 수 있다.
- 충돌 감지: 충돌 감지는 시뮬레이션에서 물체들이 실제로 충돌했는지 여부를 인식하는 단계이다. 이 단계에서는 기본적인 충돌 판정 기법들이 사용된다.
- AABB 충돌 박스: Axis-Aligned Bounding Box로, 물체를 둘러싸는 최소의 직육면체를 사용한다.
- OBB 충돌 박스: Oriented Bounding Box로, 물체의 회전을 고려한 충돌 박스이다.
-
사각형 간의 충돌: Separating Axis Theorem(SAT)을 사용할 수 있다.
-
충돌 응답: 충돌 감지 후, 충돌한 물체들이 어떻게 반응할 것인가를 결정하는 단계이다.
- 바운스 반응: 탄성 충돌의 경우, 빠져나가려는 힘에 따라 물체가 반동하면서 튕겨나가는 방식이다.
- 슬라이딩 반응: 물체가 서로 미끄러지며 충돌 힘의 일부가 마찰로 변환되는 경우이다.
- 정지 응답: 두 물체가 충돌 후 서로 밀치는 힘이 발생하여 즉시 정지하는 경우이다.
시뮬레이션의 안정성과 시간 단계
실제 물리 시뮬레이션에서는 시간의 흐름을 적절히 나누어 시뮬레이션하는 것이 중요하다. 이를 위해 시간 단계(time step)를 설정하고, 시뮬레이션의 안정성을 고려해야 한다.
시간 단계 설정
시간 단위가 너무 길면 충돌이나 운동의 변화가 부정확해질 수 있으며, 너무 짧으면 계산량이 급격히 증가할 수 있다. 일반적으로 물리 시뮬레이션에서는 일정한 시간 단위를 사용하며, 이를 '프레임 타임'이라고 한다.
dt = 0.016 # 약 60프레임(60Hz)을 위한 시간 단계
while simulating:
update_physics(dt)
안정성 고려
시간 단계가 너무 긴 경우, 물체의 움직임을 예측하는 것이 어렵기 때문에 시뮬레이션이 불안정해질 수 있다. 이를 해결하기 위해 다양한 수치적 기법(numerical methods)이 활용된다. - 유러 방법(Euler Method): 간단하지만 불안정성 이슈가 있을 수 있다. - 룬게-쿠타 방법(Runge-Kutta Method): 보다 정확한 예측을 위한 방법이다. - 폭포 방법(Implict Method): 폭발적 현상을 방지하기 위해 사용된다.