C++

[강의] 2월 4일 수업정리

k-codestudy 2025. 2. 4. 17:31

오늘은 백터와 행렬에 대한 이론 수업을 들었다.

 

벡터(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)=(x2x1,y2y1)

스칼라 곱 (벡터의 배율 조정, 크기 조절)

  • 벡터에 스칼라 값을 곱하면 크기(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 부분이 사용됨
  • 이동 변환: 마지막 행렬 요소가 사용됨

이동 행령(Translation Martix)
신축 행렬 (Scale Martix)
회전 행렬 (Rotaion Martix)

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