오늘은 백터와 행렬에 대한 이론 수업을 들었다.
벡터(Vector)의 개념과 활용
벡터는 방향과 크기를 가지는 수학적 개념으로, 게임 및 물리 시뮬레이션에서 객체의 이동 및 회전에 사용된다
벡터의 개념
벡터의 기본 정의
- 벡터(Vector): 방향과 크기를 가지는 값
- 스칼라(Scalar): 크기만 존재하는 값
벡터의 활용
- 좌표 이동: 벡터는 점(Point)의 위치를 이동시키기 위해 사용된다
- 예: 어떤 점 P(x, y)에 벡터 V(dx, dy)를 더하면 새로운 위치 P' = (x + dx, y + dy)가 된다
- 즉, 벡터의 적용은 덧셈으로 이루어지며, 미래의 위치를 예측하는 데 사용된다
게임에서의 시간 개념
- 게임에서는 벡터를 적용할 때 프레임 단위로 계산하지만, 실제 물리 계산에서는 시간(Δt, Delta Time)을 고려하여 속도 및 위치를 계산한다
- 위치 = 현재 위치 + (속도 × Δt)
- 이때, Δt는 한 프레임당 경과한 시간이다
벡터 연산
덧셈과 뺄셈
- 벡터는 더하거나 뺄 수 있다
두 점 사이의 방향 벡터
- 방향 벡터(Direction Vector)는 한 점에서 다른 점으로 가는 방향과 크기를 나타냄
- 계산 공식: 방향 벡터=P(end)−P(start)
- 즉, 방향 벡터 = (x2,y2)−(x1,y1)=(x2−x1,y2−y1)
스칼라 곱 (벡터의 배율 조정, 크기 조절)
- 벡터에 스칼라 값을 곱하면 크기(Scale)를 조절할 수 있다
- Ex) 벡터 V(x, y)에 s를 곱하면
- 이는 확대 및 축소(Scaling) 연산으로 활용된다
단위 벡터 (Normalization)
단위 벡터란?
- 크기가 1인 벡터를 단위 벡터라고 한다
- 방향만을 나타내며, 크기는 항상 1이다
단위 벡터 구하는 법
- 벡터의 길이(크기)를 구한다
- 벡터의 크기(Magnitude)
- 각 성분을 벡터의 크기로 나눈다
- 단위 벡터 계산
게임에서 단위 벡터의 역할
- 방향을 유지하면서 속도를 조절하기 위해 단위 벡터를 먼저 구한 후, 속도를 곱하는 방식으로 사용한다
내적(Dot Product)과 외적(Cross Product)
내적 (Dot Product)
- 두 벡터의 방향이 얼마나 유사한지 확인할 수 있다
- 내적 공식
결과값:
- cos θ 값이 나오므로, 두 벡터가 이루는 각도를 구할 수 있다
- 응용: 조명 계산, 물체의 정렬 확인, 충돌 판정 등
외적 (Cross Product, 3D에서 사용)
- 두 벡터의 수직인 벡터(법선 벡터, Normal Vector)를 구할 때 사용된다.
- 공식 (3D에서 적용됨)
- i, j, k는 각각 x, y, z 방향 단위 벡터
- 외적 결과: 두 벡터에 수직한 방향의 벡터가 생성됨
- 응용: 법선 벡터 계산, 회전 방향 결정, 충돌 판정 등
행렬과 벡터 변환
행렬(Matrix)의 역할
벡터를 가공하는 용도
- 확대(Scaling)
- 축소(Shrinking)
- 이동(Translation)
- 회전(Rotation)
행렬 곱셈 (벡터 변환)
- 행렬의 곱셈은 벡터의 변환에 사용
- 기본적인 벡터 변환
- 2D 회전 행렬
- 위 행렬을 벡터에 곱하면 지정된 각도만큼 회전이 가능하다.
3D 변환 행렬 (4×4 행렬)
- 3D에서 벡터 변환을 위해 4×4 행렬을 사용한다.
- 3D 좌표 x, y, z를 포함하며, 추가적으로 w 요소가 존재한다.
- 회전 변환: 3×3 부분이 사용됨
- 이동 변환: 마지막 행렬 요소가 사용됨
6. 게임에서 벡터의 활용
캐릭터 이동 및 방향 설정
현재 위치에 방향 벡터를 더하여 이동을 계산함
- P = 현재 위치
- D(unit)= 방향 벡터
- V = 속도
- Δt = 프레임당 시간
충돌 판정 (Dot Product 활용)
- 내적을 활용하여 벡터가 바라보는 방향을 확인 가능
- 충돌 감지 시 법선 벡터를 활용하여 반사 벡터를 계산
회전 및 물리 효과 (Cross Product 활용)
- 물체의 회전 방향을 계산할 때 외적을 사용
충돌 판정하고 회전 및 물리효과는 언리얼에 함수가 있으니 그것을 사용하면 더 간편하다
'C++' 카테고리의 다른 글
[강의] 2월 7일 수업정리 (0) | 2025.02.07 |
---|---|
[강의] 2월 5일 수업정리 (0) | 2025.02.05 |
[강의] 2월 3일 수업정리 (0) | 2025.02.03 |
[강의] 1월 31일 수업정리 (0) | 2025.01.31 |
[강의] 1월 24일 수업정리 (0) | 2025.01.24 |