언리얼엔진/기초수학

벡터와 좌표계

season97 2023. 10. 4. 23:29

 

이 수치는 영점으로 부터 얼마나 떨어져있느냐..

타고 들어 가면 더블로 되어있다~

 

▶ 벡터란?

 

ㆍ 벡터는 크기와 방향을 정의하는 값. 일반적으로 화살표로 그려져 화살표의 길이가 벡터의 크기를 나타내고

화살표의 방향이 벡터의 방향을 나타낸다, 좌표계에서 예시를 보는게 아래 그림

v와 u 는 같은벡터

ㆍ 벡터는 물리학에서 속도, 가속도 등과 같은 개념을 표현하는데 주로 사용하지만....

 

ㆍ 그래픽스 프로그래밍에서는 위치,이동,회전 등 다양한 개념을 표현하는데 사용

 

예를들어 3D공간에서 점A에서 점B로 이동하는 것은 벡터로 표현할 수 있다.

 

피타고라스를 이용해 빗변의 길이 구할수 있다.

 

  3차원 공간에서의 벡터

 

ㆍ 3차원 공간에서 벡터는 보통 (x,y,z)형태의 순서쌍으로 표현되며 각 성분은 x축, y축, z축에 대한 방향성을 나타냄

예를들어 (1,0,0)은 x축 방향으로 크기 1인 벡터를 의미한다

 

왼손좌표계 오른손좌표계, 언리얼은 왼손좌표계

 

 

  벡터의 표현

2차원 3차원 4차원

 

  영백터와 기저벡터 ( 단위벡터 )

 

u는 영벡터 i,j,k는 기저벡터

ㆍ 모든 성분의 값이 0인 벡터를 영벡터

 

ㆍ 축을 기준으로 각각 성분의 값이 1이며 크기가 1인 벡터를 표준기저벡터 또는 단위벡터 라고 한다.

 

 

  벡터의 덧셈과 뺄셈

 

ㆍ 벡터의 덧셈과 뺄셈은 각 성분별로 수행됩니다. 예를들어 두 벡터 A = (Ax,Ay,Az)와 B= (Bx,By,Bz)가 있다면

→  A + B = (Ax + Bx, Ay + By, Az - Bz)

→  A - B = (Ax - Bx, Ay - By, Az - Bz)

벡터의 덧셈 예시

⊙ 언리얼엔진에서 지원하는 덧셈뺄셈 함수

벡터의 값이 저장된다

 

  벡터의 곱셈

 

ㆍ 스칼라 곱 

ㄴ> 벡터를 스칼라(실수)로 곱하는 것은 각 성분을 그 스칼라 값으로 곱합니다. 예를들어 벡터A와 스칼라s가 있다면

→  s * A = (s * Ax, s * Ay, s * Az)

벡터의 곱셈

 

 

⊙ 언리얼엔진에서 지원하는 곱셈 함수

 

  벡터의 내적 ( Dot Product )

 

⊙ 구하는 식

 

ㆍ 내적은 두 벡터의 방향성을 비교하는데 사용됩니다. 내적의 결과는 스칼라입니다. 두 벡터 A와 B가 있다면

  A ㆍ B = AxBx + AyBy + Az*Bz

=  ∥a∥ ∥b∥cos θ

ㆍ 성분 별 곱셈 후 그 결과를 모두 더한 것입니다. 나오는 값은 스칼라값이며 내적은 두 벡터 사이의 각도를 계산하는데 사용됩니다.

 

ㆍ 만약 A와 B가 모두 단위 벡터(모두 1인 벡터)라면 A*B = cos(θ)이 됩니다, 여기서 θ는 A와B사이의 각도입니다.

 

⊙ 기하학적 의미

 

ㆍ 투영

예각일 경우에는 양수, 직각일 경우에는 0,  둔각일 경우에는 음수가 된다.

ㆍ 두 벡터가 이루는 각도에 따라서 위와 같이 부호가 결정됩니다.

 

ㆍ 물체의 위치를 나타내는 벡터와 특정 평면의 법선벡터(평면에 수직인벡터) 간의 내적을 계산하면 그 결과는 물체가 평면의 어느쪽에 있는지를 알려줍니다. 내적이 양수라면 물체는 평면의 한쪽에 있고 음수라면 반대쪽에 있습니다.

 

ㆍ 내적에 스칼라 곱셈

 

ㆍ 일반적으로 벡터의 방향은 유지하면서 그 크기를 조절할 필요가 있을 때 스칼라 곱셈이 사용됩니다.

 

내적에 스칼라 곱셈

ㆍ 투영되는 벡터가 단위벡터가 아니라면 내적된 결과에 길이를 곱해주면 된다. (단위벡터일시 0)

 

ㆍ a와 b 벡터가 있고 k가 스칼라값일때 " k * b "는 벡터 b의 각 성분을 k 배 확대한 새로운 벡터를 생성합니다.

그리고 이렇게 만들어진 새로운 벡터와 a의 내적을 구하는 것이"a ⋅ (kb)"입니다.

 

ㆍ 결과는 원래 두 백터 a,b의 내적에 k를 곱한 값과 동일하므로 분배법칙이 성립합니다 "k * (a * b) "

 

ㆍ 교환법칙 또한 성립합니다.

 

ㆍ 두 벡터 사이의 각도가 주어졌을때, 한 벡터의 길이를 확장하고 싶으면 해당 벡터에 cos(θ)를 곱해주면 됩니다.

 

ㆍ 벡터의 길이 계산

 

벡터의 길이를 계산하는 방법

ㆍ sqrt(v,v)

 

 

 cos(θ)?

ㆍ v벡터가 단위벡터라고 했을때 투영된 벡터의 길이가 내적이다.

 

  위 그림을 보면  u벡터를 빗변 투영된 벡터를 밑변으로 하는 직각삼각형으로 볼 수있다. 

 

  u벡터의 길이가 1이라면 내적값을 직각삼각형의 성질을 통해 코사인값으로 표현할 수 있다.

예각일때 양수이고 둔각일때 음수인 이유 = 코사인의 성질

a ㆍ b = ||a||*||b||*cos(θ)

 

ㆍ acos함수를 통해 두 벡터의 성분값만 할면 두 벡터가 어떤 각도로 배치되어 있는지도 알 수 있다.

 

θ = acos(a*b)

 

 

⊙ 언리얼엔진에서의 사용 예시

 

ㆍ 언리얼 엔진에서는 예를들어 캐릭터가 특정 방향을 바라보고 있는지 판단할 때 내적을 사용할 수 있습니다.

캐릭터의 전방향 벡터와 목표지점을 가리키는 벡터 사이의 내적 값을 확인함으로써 캐릭터가 목표지점을 바라보고 있는지 확인 여부를 알 수 있습니다. 또한 AI가 플레이어가 시야 안에 있는지를 확인하거나 조명, 그림자 효과를 구현하거나 다양한 상황에서 활용됩니다.

 

⊙ 언리얼엔진에서 지원하는 내적구하는 함수

dot_product에 스칼라값이 저장됨

 

  벡터의 외적 (Cross Porduct)

 

ㆍ 외적은 주로 두 벡터에 수직인 새로운 벡터를 찾는데 사용됩니다. 만약 두 벡터A와 B가 있다면

A X B = ((Ay,Bz) - (AzBy), (AzBx) - (AxBz), (AxBy) - (AyBx))

 

ㆍ 외적은 주로 두 벡터가 형성하는 평면에 수직인 방향을 찾거나, 두 벡터가 이루는 면적을 구하는데 사용됩니다.

 

ㆍ 식의 결과 벡터는 원래의 두 벡터에 수직이며 그 크기는 원래의 두 벡터가 이루는 평행사변형의 넓이와 같습니다.

벡터의 외적

 

 

ㆍ 언리얼 엔진에서는 예를들어 비행기가 특정 축 주위로 회전하려 할 때 외적을 사용해여 해당 축을 구할 수 있습니다.

 

 

⊙ 언리얼엔진에서 지원하는 외적구하는 함수

 

 

 

 

'언리얼엔진 > 기초수학' 카테고리의 다른 글

행렬  (1) 2023.10.04