# 시뮬레이션 공간과 좌표계

물리 엔진에서 시뮬레이션 공간과 좌표계는 매우 중요한 구성 요소이다. 이 장에서는 시뮬레이션 공간의 정의와 다양한 좌표계에 대해 탐구한다. 이론부터 실제 응용 예제까지 포괄적으로 다룬다.

#### 시뮬레이션 공간

시뮬레이션 공간은 물리 엔진이 동작하는 전체 영역을 정의한다. 이 공간은 일반적으로 2차원(2D) 또는 3차원(3D)으로 설정되며, 가상 객체들이 자유롭게 움직이고 상호작용할 수 있는 무대를 제공한다.

**2차원 시뮬레이션**

2차원 시뮬레이션은 평면 공간에서 이루어지는 물리 시뮬레이션을 말한다. 보통 다음과 같은 형태로 표현된다:

$$
\mathbf{r} = (x, y)
$$

여기서 $x$와 $y$ 는 평면에서의 좌표를 나타낸다.

**3차원 시뮬레이션**

3차원 시뮬레이션은 공간적인 움직임과 더 복잡한 상호작용을 허용한다. 벡터로 표현하면 다음과 같다:

$$
\mathbf{r} = (x, y, z)
$$

여기서 $x$, $y$, $z$는 각각 3차원 공간의 좌표를 나타낸다.

#### 좌표계

좌표계는 객체의 위치와 방향을 정의하는 방법이다. 다양한 좌표계가 존재하며 대표적인 예로 데카르트 좌표계, 극좌표계 및 구좌표계가 있다.

**데카르트 좌표계**

가장 일반적으로 사용되는 좌표계로, 직교 좌표계를 의미한다. n차원(n-D) 공간에서 벡터 $\mathbf{v}$는 다음과 같이 표현된다:

$$
\mathbf{v} = (x\_1, x\_2, \ldots, x\_n)
$$

**극좌표계**

2차원 공간에서의 위치를 반지름 $r$과 각도 $\theta$로 나타내는 방식이다. 변환식은 다음과 같다:

$$
x = r \cos \theta
$$

$$
y = r \sin \theta
$$

**구좌표계**

3차원 공간에서의 위치를 반지름 $r$, 세타 각도 $\theta$, 파이 각도 $\phi$로 나타낸다. 변환식은 다음과 같다:

$$
x = r \sin \theta \cos \phi
$$

$$
y = r \sin \theta \sin \phi
$$

$$
z = r \cos \theta
$$

이러한 좌표계는 특정 시뮬레이션 및 문제의 간소화에 따라 선택적으로 사용된다.

**좌표계 변환**

물리 엔진에서는 종종 한 좌표계에서 다른 좌표계로 변환해야 할 필요가 있다. 일반적인 3D 좌표 변환은 다음과 같은 행렬 곱셈으로 수행된다:

$$
\mathbf{r}*{new} = \mathbf{M} \mathbf{r}*{old}
$$

여기서 $\mathbf{M}$은 좌표 변환 행렬이다.

#### 좌표 변환의 예

다음은 2D 데카르트 좌표계를 2D 극좌표계로 변환하는 예이다. 주어진 점 $(x, y)$의 데카르트 좌표를 극좌표로 변환하려면 다음 공식을 사용할 수 있다:

$$
r = \sqrt{x^2 + y^2}
$$

$$
\theta = \arctan\left(\frac{y}{x}\right)
$$

반대로 극좌표 $(r, \theta)$를 데카르트 좌표 $(x, y)$로 변환하는 공식은 다음과 같다:

$$
x = r \cos\theta
$$

$$
y = r \sin\theta
$$

이러한 변환은 원형 운동의 시뮬레이션이나 눈금 조정과 같은 작업에서 매우 유용하다.

#### 시뮬레이션 공간의 경계와 제한

시뮬레이션 공간은 또한 경계 및 제한을 가진다. 이는 특정 객체가 시뮬레이션 공간을 벗어나지 않도록 보장하며, 다양한 물리적 제약과 상호작용 정의를 포함할 수 있다.

**경계 조건**

다음은 시뮬레이션 공간에서 자주 사용되는 경계 조건의 예이다:

* **고정 경계**: 객체는 특정 시뮬레이션 경계를 넘지 못하게 함으로써 벽과 같은 역할을 한다.
* **반사 경계**: 객체가 경계를 넘는 경우 반사되는 경계로, 빛의 반사와 유사한다.
* **주기 경계 조건**: 객체가 한쪽 경계를 넘으면 반대쪽 경계로 나타나는 조건으로, 토러스형 공간을 형성한다.

#### 동차 변환과 비동차 변환

서로 다른 좌표계 간의 변환은 동차 변환 혹은 비동차 변환을 통해 이루어진다. 이러한 변환은 일반적으로 선형 대수의 기본 개념을 따른다.

**동차 변환**

동차 변환은 기본적으로 선형 변환과 병진 변환을 조합한 것이다. 3D 공간에서 동차 변환은 4x4 행렬을 사용한다. 일반적인 동차 변환 행렬은 다음과 같다:

$$
\mathbf{M} = \begin{pmatrix} R & T \ 0^T & 1 \end{pmatrix}
$$

여기서 $R$은 회전 및 스케일링, $T$는 병진 벡터이다.

**비동차 변환**

비동차 변환은 단순한 선형 변환을 의미하며, 일반적으로 회전, 스케일링, 전단 등의 변환을 포함한다.

#### 시뮬레이션의 스케일과 시간 단위

시뮬레이션의 정확성과 효율성을 위해 스케일과 시간 단위를 설정하는 것이 중요하다. 이는 시뮬레이션 결과의 실용성과 관련이 있다.

* **공간적 스케일**: 실제 세계의 길이 단위에 해당하는 시뮬레이션 단위를 설정한다. 예를 들어, 1유닛을 1미터로 설정할 수 있다.
* **시간 단위**: 시뮬레이션의 시간 진행을 제어하며, 보통 초 단위로 설정한다. 예를 들어, 시뮬레이션이 실시간으로 진행되도록 하기 위해 1프레임을 1/60초로 설정할 수 있다.

이러한 기본적인 구성 요소와 변환 방법들을 이해하면, 물리 엔진에서 시뮬레이션 공간과 좌표계를 효과적으로 설정하고 활용할 수 있다.
