# Math Module

게임 개발에 필요한 수학 관련 유틸리티들을 제공하는 모듈입니다.

## 모듈 구조

- `vec2.rs` - 2D 벡터 구현

## 주요 구성 요소

### Vec2
2D 벡터를 나타내는 구조체입니다. 위치, 방향, 속도 등 다양한 용도로 사용됩니다.

```rust
pub struct Vec2 {
    pub x: f32,
    pub y: f32,
}
```

#### 주요 기능
- 기본 벡터 연산 (덧셈, 뺄셈, 스칼라 곱셈)
- 벡터 크기 계산 (`magnitude`, `magnitude_squared`)
- 벡터 정규화 (`normalize`, `normalized`)
- 내적 계산 (`dot`)
- 거리 계산 (`distance`, `distance_squared`)

## 사용법

### Vec2 기본 사용
```rust
use crate::math::Vec2;

// 벡터 생성
let position = Vec2::new(100.0, 50.0);
let velocity = Vec2::new(10.0, -5.0);

// 벡터 연산
let new_position = position + velocity;
let scaled_velocity = velocity * 2.0;

// 벡터 크기 계산
let speed = velocity.magnitude();

// 정규화 (단위 벡터)
let direction = velocity.normalized();

// 내적
let dot_product = velocity.dot(&direction);
```

### 컴포넌트에서 사용
```rust
use crate::{entity::*, math::Vec2};

// Transform 컴포넌트에서 Vec2 사용
let transform = Transform {
    position: Vec2::new(100.0, 50.0),
    scale: Vec2::new(1.0, 1.0),
    // ...
};

// Sprite 컴포넌트에서 Vec2 사용
let sprite = Sprite {
    size: Vec2::new(64.0, 64.0),
    // ...
};
```

### 시스템에서 사용
```rust
use crate::{system::*, math::Vec2};

// 입력 시스템에서 마우스 위치
let mouse_position: Vec2 = input_state.mouse_position();

// 물리 시스템에서 속도 계산
let velocity = Vec2::new(dx, dy);
let new_position = current_position + velocity * delta_time;
```

## 확장성

앞으로 다음과 같은 수학 관련 기능들을 추가할 수 있습니다:

- `Vec3` - 3D 벡터
- `Mat3`, `Mat4` - 변환 행렬
- `Rect` - 사각형 영역
- `Circle` - 원 영역
- 삼각함수 유틸리티
- 보간 함수들 (lerp, slerp 등)

## 모듈 구조

- `vec2.rs` - 2D 벡터 구현
- `mod.rs` - 모듈 정의 및 re-export

## 성능 고려사항

- `Vec2`는 `Copy` trait을 구현하여 스택에서 효율적으로 복사됩니다
- 자주 사용되는 연산들은 인라인 최적화가 적용됩니다
- `magnitude_squared`를 사용하면 제곱근 계산을 피할 수 있어 더 빠릅니다