! 주의 : TIL 게시글입니다. 다듬지 않고 올리거나 기록을 통째로 복붙했을 수 있는 뒷고기 포스팅입니다.
물리 기반 시뮬레이션이나 컴퓨터 그래픽스 환경에서 물체의 운동을 그려내려면 시간에 따라 가속도와 속도, 위치 등을 업데이트해야 합니다.
시간에 따른 가속도 및 그에 의해 변하는 속도, 그에 의해 변하는 위치는 미분방정식으로 주어지고,
이 미분방정식들을 수치해석(numerical analysis)적으로 근사하여 풀게 됩니다.
이 중 가장 기초적인 두 가지 접근법인 Explicit Integration(명시적 적분), Implicit Integration(암시적 적분)에 대해 쓰려고 합니다.
- Explicit Integration: 현재 시점의 시스템 상태로부터 다음 시점의 시스템 상태를 계산합니다. "현재 정보(속도/가속도 등)가 다음 동안에도 똑같겠지"라고 생각하는 셈입니다.
- Implicit Integration: 시스템의 현재 상태와 미래 상태를 모두 포함하는 방정식을 풀어서 해를 구합니다. "다음 순간의 정보를 사용한다."로 생각하면 편합니다.
여기서는 이 두 가지가 의미하는 바를 살펴보고, 특히 이 두 가지 방법에 의해 발생할 수 있는
연속적인 물리계를 이산적(Discrete)인 시간 간격 로 쪼개어 연산할 때 발생하는 오차와 이로 인한 효과를 알아보기 위해
등속 원운동(Uniform Circular Motion) 이라는 이상적인 조건에 대입해보며 살펴보려 합니다
주어진 조건 (Given Contexts & Conditions)
아래와 같이 벡터 공간에서 등속 원운동하는 상황을 생각해봅니다.
- 시뮬레이션의 현재 시점을 , 시간 간격(Time step) , 가 지난 후 다음 시점을
- 임의의 시점 에서의 물체의 위치 벡터를 , 순간 속도 벡터를
- 등속 원운동:
- 원의 중심 위치 벡터를 , 궤도의 반지름을 이라 할 때, 물체의 위치는 항상 중심으로부터 일정한 거리를 유지: ()
- 물체의 속력(속도의 크기)은 항상 일정합니다. ()
- 속도 벡터 는 항상 궤도의 접선 방향, 반경 벡터와 직교. ()
- 구심가속도: 항상 원의 중심을 향하는 가속도 가 작용하여 물체가 궤도를 이탈하지 않고 원운동을 유지.
- 원의 중심에서 물체를 향하는 단위 방향 벡터를 이라 할 때, 가속도
Explicit Integration
Explicit Integration이 현재 정보를 사용해 다음 위치를 계산합니다. 라는 뜻은:
와 같이, 다음 시점의 위치를 구하기 위해 현재 시점의 속도 를 사용한다 를 의미합니다.

dt동안 실제로는 원운동을 위해 조금씩 변화하는 접선속도가 존재하고 이 접선속도들은 모두 다릅니다.
이 중에서 dt가 시작하는 시점의 가장 처음의 속도인 만을 선택해 "동안 속도는 변함없이 " 를 기준으로 계산했습니다.
따라서 아무리 가 작아도 원보다 바깥쪽으로 곧게 나아간 형태(빨간 선)가 되므로, Explicit Integration으로 원운동을 시뮬레이션하면 발산성이 있는 나선형을 그리게 됩니다.
Implicit Integration
Implicit Integration은 다음 시점의 정보를 사용합니다. 그 의미는:
와 같이, 다음 시점의 위치를 구하기 위해 _다음 시점의 속도 를 사용한다* 를 의미합니다.
이 때, 아직 가 무엇인지 알고 있지 못하므로,
연립하여 를 알아낼 다른 방정식이 필요합니다.
시점의 등속원운동의 구심가속도 에 대해
이고, 는, 원점에서 원 중심까지를 라고 할 때
이므로, 이제 연립하여 를 구할 수 있습니다.
그런데 이렇게 Implicit Integration하는 과정은 _dt구간에 대해 다음 시점의 속도 만을 사용하여 계산_ 하므로 이번에는 안쪽으로 곧게 뻗어나가는 형태(파란 선)가 됩니다.

따라서 Implicit Integration 으로 원운동을 시뮬레이션하면 수렴성이 있는 나선형을 그리게 됩니다.

대충 이런식으로 생기게 됩니다.
이런 unstable한 현상을 막기 위해
두 방식을 적절히 섞어서 쓰거나, 제약조건같은 것을 넣기도 합니다.
예를 들어 이런 원운동에서는, "이동 후에 중심으로부터 거리가 과 동일해야 한다"를 지키기 위해 위치를 이동시키는 등..
이런 것에 대해서는 다음번에 알아보면 좋겠습니다