# 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`를 사용하면 제곱근 계산을 피할 수 있어 더 빠릅니다