# 구와 구의 충돌 검사

구와 구의 충돌 검사는 두 구가 서로 겹치는지를 확인하는 기본적인 물리 엔진 알고리즘 중 하나이다. 이 알고리즘은 두 구의 중심 사이의 거리가 두 구의 반지름 합보다 작거나 같은지를 확인하여 충돌 여부를 판별한다. 이를 단계별로 설명하면 다음과 같다.

#### 1. 구의 정의

* 각 구는 중심 좌표와 반지름으로 정의된다.
  * 구 A의 중심: $\mathbf{C}\_A$
  * 구 B의 중심: $\mathbf{C}\_B$
  * 구 A의 반지름: $r\_A$
  * 구 B의 반지름: $r\_B$

#### 2. 구간 거리 계산

* 두 구의 중심 간의 거리를 계산한다.
  * $d = \left| \mathbf{C}\_A - \mathbf{C}\_B \right|$

#### 3. 충돌 조건

* 두 구의 반지름 합을 구한다.
  * $r\_{sum} = r\_A + r\_B$
* 충돌 여부를 판별하는 조건은 다음과 같다.
  * 충돌 발생: $d \leq r\_{sum}$

#### 4. 의사코드

다음은 충돌 여부를 확인하는 의사코드이다.

```cpp
bool isCollision(Vector3 centerA, float radiusA, Vector3 centerB, float radiusB) {
    // 두 구의 중심 간의 거리 계산
    float distance = (centerA - centerB).length();
    
    // 두 구의 반지름 합보다 중심 간의 거리가 작거나 같으면 충돌
    return distance <= (radiusA + radiusB);
}
```

#### 5. 알고리즘의 시간 복잡도

* 두 벡터의 거리 계산은 $O(1)$의 상수 시간이므로, 이 충돌 검사의 시간 복잡도는 $O(1)$이다.

이 방식은 매우 간단하면서도 효율적인 방법으로, 충돌 판정에 자주 사용된다.
