# 힘과 에너지의 보존 법칙

물리 시뮬레이션을 이해하고 구현하기 위해서는 힘과 에너지의 기본 개념을 이해하는 것이 매우 중요하다. 아래에서는 물리 시뮬레이션에서 중요한 두 가지 법칙인 힘의 법칙과 에너지 보존 법칙에 대해 상세히 설명하겠다.

#### 힘(F)

뉴턴의 제2법칙에 따르면, 물체의 가속도는 그 물체에 가해진 총 힘에 비례하고, 그 물체의 질량에 반비례한다. 이는 다음과 같은 수식으로 표현된다:

$$
\mathbf{F} = m \mathbf{a}
$$

여기서,

* $\mathbf{F}$는 물체에 가해진 총 힘 (뉴턴, N)
* $m$은 물체의 질량 (킬로그램, kg)
* $\mathbf{a}$는 물체의 가속도 (미터/초^2, $\text{m/s}^2$)

#### 에너지(E)

에너지는 다양한 형태로 존재하며, 대표적인 형태로는 운동 에너지(Kinetic Energy)와 위치 에너지(Potential Energy)를 들 수 있다.

**운동 에너지 (Kinetic Energy)**

운동 에너지는 물체가 운동할 때 가지는 에너지이다. 운동 에너지는 다음의 수식으로 표현된다:

$$
E\_k = \frac{1}{2} mv^2
$$

여기서,

* $E\_k$는 운동 에너지 (줄, J)
* $m$은 물체의 질량 (킬로그램, kg)
* $v$는 물체의 속도 (미터/초, $\text{m/s}$)

**위치 에너지 (Potential Energy)**

위치 에너지는 물체가 위치해 있는 위치에 따라 가지는 에너지이다. 중력 위치 에너지는 다음의 수식으로 표현된다:

$$
E\_p = mgh
$$

여기서,

* $E\_p$는 위치 에너지 (줄, J)
* $m$은 물체의 질량 (킬로그램, kg)
* $g$는 중력가속도 (약 9.81 미터/초^2, $\text{m/s}^2$)
* $h$는 기준점으로부터의 높이 (미터, m)

#### 에너지 보존 법칙

에너지 보존 법칙은 닫힌 시스템 내에서 전체 에너지가 항상 일정하게 유지된다는 법칙이다. 운동 에너지와 위치 에너지를 합한 전체 에너지는 다음과 같이 표현된다:

$$
E\_{\text{total}} = E\_k + E\_p
$$

닫힌 시스템에서는 외부 힘이나 에너지가 추가되거나 제거되지 않는 한, 총 에너지는 시간에 따라 변하지 않는다. 이 법칙은 다음의 수식으로 표현된다:

$$
E\_{\text{total, initial}} = E\_{\text{total, final}}
$$

다시 말해, 에너지는 한 형태에서 다른 형태로 변환될 수 있지만, 전체 에너지의 합은 항상 일정하게 유지된다.

#### 예시 시뮬레이션

이제 위의 개념들을 바탕으로 간단한 예시 시뮬레이션을 통해 힘과 에너지 보존 법칙을 어떻게 적용하는지 살펴보겠다. 예를 들어, 질량 $m$인 물체가 높이 $h$에서 자유롭게 떨어진다고 가정해 봅시다.

물체가 처음에 가지는 에너지는 위치 에너지이다:

$$
E\_{\text{initial}} = mgh
$$

물체가 바닥에 도달하면, 모든 위치 에너지는 운동 에너지로 전환된다. 이때, 물체의 속도 $v$는 다음과 같아진다:

$$
E\_{\text{final}} = \frac{1}{2} mv^2
$$

에너지 보존 법칙에 따르면, 처음의 위치 에너지는 바닥에 떨어질 때의 운동 에너지와 같다:

$$
mgh = \frac{1}{2} mv^2
$$

이 식을 풀어서 속도 $v$를 구하면,

$$
v = \sqrt{2gh}
$$

#### 물리 엔진의 구현

물리 엔진에서는 위와 같은 법칙을 통해 물체의 운동을 시뮬레이션한다. 다음은 기본적인 물리 엔진의 구조를 설명한 것이다:

1. **상태 초기화**: 물체의 초기 위치, 속도, 그리고 기타 물리적 속성을 설정한다.
2. **힘 계산**: 각 물리적 요소들(중력, 마찰력, 충격력 등)에 의해 가해지는 힘을 계산한다.
3. **가속도 계산**: $\mathbf{a} = \frac{\mathbf{F}}{m}$ 식을 통해 가속도를 계산한다.
4. **속도 업데이트**: Euler 적분법 등을 사용하여 속도를 업데이트한다.

$$
\mathbf{v\_{\text{new}}} = \mathbf{v\_{\text{old}}} + \mathbf{a} \Delta t
$$

5. **위치 업데이트**: 속도를 통해 물체의 새로운 위치를 계산한다.

$$
\mathbf{x\_{\text{new}}} = \mathbf{x\_{\text{old}}} + \mathbf{v\_{\text{new}}} \Delta t
$$

6. **충돌 처리**: 물체끼리 충돌하는 경우, 충돌 후의 속도 및 위치를 계산하여 업데이트한다.
7. **반복**: 시뮬레이션 시간 동안 이 과정을 반복하여 물체의 움직임을 시뮬레이션한다.

#### 충돌 시뮬레이션

물리 엔진에서 중요한 부분 중 하나는 물체 간의 충돌을 다루는 것이다. 충돌 시뮬레이션은 다음과 같이 진행된다:

1. **충돌 검사**: 두 물체가 충돌했는지 검사한다.
2. **충돌 대응**: 충돌이 발생한 경우, 물체들의 속도를 재계산하여 반영한다. 이때 운동량 보존 법칙 및 에너지 보존 법칙을 적용한다.
3. **새로운 속도 계산**: 탄성 충돌 또는 비탄성 충돌에 따라 새로운 속도를 계산한다.
4. **위치 조정**: 물체들의 위치를 조정하여 충돌 후 겹치지 않도록 한다.

***

물리 엔진은 힘과 에너지의 법칙을 바탕으로 물체의 운동을 시뮬레이션한다. 뉴턴의 운동 법칙, 에너지 보존 법칙, 충돌 처리 등을 정확히 이해하고 구현함으로써 현실적이고 정확한 물리 시뮬레이션을 할 수 있다. 이러한 기초 개념을 확실히 이해하면, 복잡한 시뮬레이션이나 게임 물리 엔진을 효율적으로 설계하고 구현할 수 있다.
