게임수학
게임수학 - Vector(기하)
KimGeon-U
2024. 12. 31. 17:56
정의
- 크기와 방향을 가진 수학적 개체
- 2D(x,y), 3D (x,y,z)로 표현한다.
- 단위벡터 - 길이가 1인 벡터
- 영벡터 - 길이가 0인 벡터
- 정규화 - 벡터를 벡터의 길이로 나누어 1로 만든다
- 내적 - 두 벡터가 이루는 각도를 구한다.
- 두 개의 벡터에 수직인 벡터를 구한다.
이동
- 매 시간(Sec)동안 위치 업데이트
- NewPosition(Vector) = OldPosition(Vector) + (Velocity x DeltaTime)
- Velocity : 초당 이동 값
- DeltaTime : 프레임 당 시간(초)
- Ex) FPS가 60일 경우, DeltaTime = 1/60 (0.01666...)
- Tick 이벤트 내 Delta Seconds를 사용한 위치 업데이트
- NewPosition(Vector) = OldPosition(Vector) + (Velocity x DeltaTime)
- 프레임 기반 이동값
- NewPosition(Vector) = OldPosition(Vector) + Velocity
- 프레임 속도에 따라 이동거리가 변동될 수 있다.
- Tick 이벤트에서 매 프레임 위치 업데이트
- NewPosition(Vector) = OldPosition(Vector) + Velocity
단위벡터 (Unit Vector)
- 길이가 1인 벡터
- 벡터가 가르키는 방향을 필요할 때 사용한다.
- 언리얼에서 정규화를 통해 방향을 가져올 수 있다.
- 블루프린트 : Normalize
- C++ : GetSafeNormal / GetUnsafeNormal
- GetSafeNormal : 벡터가 (0,0,0)일 경우, (0,0,0) 반환
- GetUnsafeNormal : 벡터가 (0,0,0)일 경우, 오류 / 충돌 발생할 수 있다.
- 캐릭터 이동, 카메라 회전, 물리엔진(힘의 방향 또는 충돌 처리)에 사용할 수 있다.
정규화 (Normalization)
- 벡터를 벡터의 길이로 나누어 1로 만드는 것
- 정규화 과정을 거쳐 방향만 남기게 한다
- 본인 * (1 / 본인의 크기)
- 벡터가 (0,0,0)일 경우 정규화가 불가능 하다.
정규화 과정
1. 벡터의 크기 계산
2. 정규화 - 각 성분을 벡터의 크기로 나눈다.
벡터의 내적 (Dot Product)
- 두 벡터가 이루는 각도를 구할 수있다.
- 내적값을 통해 두 벡터 각도의 코사인 값을 구할 수 있다.
- 정규화된 벡터의 내적 값은 -1 ~ 1 사이에 존재한다.
- Dot > 0 : 두 벡터가 같은 방향
- Dot < 0 : 두 벡터가 반대 방향
- Dot = 0 : 두 벡터는 수직
- 언리얼
- 블루프린트 : Dot Product (V1, V2)
- C++ : Dot ProDuct (V1, V2)
- 캐릭터 시야각 판별 / 투사체 방향 확인 / 충돌 반사 계산 등에 사용할 수 있다.
내적 공식
벡터의 외적 (Cross Product)
- 두 개의 벡터에 수직인 벡터를 구하는 연산
- 연산값은 크기와 방향을 모두 가지는 벡터값
- A x B = -(B x A)
- A x B = 0
- A와 B가 평행일 경우
- 두 벡터의 외적 크기 : 두 벡터가 만들 수 있는 평행사변형 넓이
- 두 벡터의 외적 방향 : 오른손 법칙에 따라 방향이 결정된다.
- 언리얼 : CrossProduct(Edge1, Edgw2)
- FVector Edge1 : Point2 - 1;
- FVector Edge2 : Point3 - 1;
- 캐릭터의 회전 방향 / 카메라 업벡터 계산 등에 사용한다.
외적 공식