본문 바로가기
공부

C++ 벡터 (단위/길이/정규화/합연산/곱연산/내적/외적)

by MY블로그 2022. 12. 15.
● 벡터 ( vector )

이번에 알아볼 벡터는 C++에서 배열을 유동적으로 크기 조절하던 기능을 의미 하는 벡터(std::vector)가 아니고

유클리디안 벡터(Euclidean vector) 또는 기하학적 벡터 (geometric vector) 이다.

즉, 3D 게임 프로그래밍에서 사용 될 벡터 이다.

기하학적으로 벡터를 방향을 가진 선분 즉, 화살표로 표현이 가능 하다.

벡터의 속성 : 길이(크기), 가리키는 방향

위치는 벡터의 속성이 아니다 그 이유는 다른 위치에 있어도 동일한 길이와 방향을 가리키는 벡터는 동일한 것으로 취급

(아래의 벡터 u 그리고 v 는 동일 한 것으로 취급 한다,)

크기와 방향을 모두 갖는 물리량을 모델링 하는데 유용 하다고 한다.

(빛이 비추는 방향, 다각형의 방향, 3D 에서 카메라가 보고있는 방향 등등)

출처 : https://hellowoori.tistory.com/43

벡터를 표시하는 방법.

u=(ux,uy),N=(Nx,Ny,Nz),c=(cx,cy,cz,cw)

왼쪽부터 순서대로 2차원 3차원 4차원의 벡터를 표시한 예시 이다.

벡터의 진행 방향은 꼬리(tail) 에서 머리(head) 방향 이다.


● 단위 벡터 ( unit vector )

단위벡터는 크기가 1인 벡터를 의미 한다.

단위 벡터가 필요한 이유는 벡터를 정규화 하기 위해서 이다.

 

곱셈에서 1 x n = n 일 경우 n에 어떤 수를 넣더라도 항상 n이 나오도록 하는 1을 곱셈에서의 항등수 라고 하며

벡터에서도 값과 벡터가 곱해질 때 단위 벡터는 항등수에 해당한다.

 

단위 벡터는 크기가 1이고 방향을 가지고 있으므로, 여기에 값을 곱해주면 방향은 같지만 크기가 다른 벡터를

프로그래머가 마음대로 설정 할 수 있다.

또는 크기는 무시하고 방향만을 나타내기 위해서도 사용 한다.

 

모든 벡터는 정규화(normalize) 과정을 거쳐 단위 벡터로 만들 수 있다.

(벡터의 정규화는 아래쪽에서 참고)

단위 벡터의 용도는 일반적으로 회전의 중심축으로써 사용되는 경우가 많다.

단위벡터 요약 이미지 / 상세내용은 아래의 참조 사이트 확인

https://ballpen.blog/%EB%8B%A8%EC%9C%84%EB%B2%A1%ED%84%B0-%EB%B2%A1%ED%84%B0%EC%9D%98-%EC%A0%95%EA%B7%9C%ED%99%94/

 

단위벡터 의미와 벡터 정규화 - ilovemyage

단위벡터(unit vector)는 크기가 1이고 방향을 갖는 벡터입니다. 이 단위벡터에 어떤 크기만큼의 배수를 취하면 벡터가 만들어집니다. 그러므로 단위벡터는 벡터의 작은 단위인 것이죠. 또한 벡터

ballpen.blog


● 벡터의 정규화 ( vector normalize )

벡터의 정규화는 벡터의 크기를 1로 만들어 단위 벡터가 되도록 만드는 것이다.

벡터의 정규화는 예시를 통하여 보도록 한다. 다음과 같이 벡터의 각 성분을 벡터의 크기로 나누는 것이다.

벡터의 정규화

정규화를 어디에쓰는지? 감이 잘 안잡혀서 유튜브를 찾아보았다.

이해하기 쉬운 영상 하나를 첨부하도록 한다.

https://www.youtube.com/watch?v=KodVbHfF0r0 


● 벡터의 길이 ( vector scalar )

스칼라는 영어의 scale 에서 유래 되었으며 평소 흔히 사용하는 스케일(크기)의 의미 이다.

대표적인 스칼라 물리량 으로는 길이, 무게, 온도, 속력, 간격 등이 있다.

벡터의 길이(스칼라)는 크기와 방향을 가지는 벡터에 대비되는 개념이다.

단지 크기만 있는 물리량이며 좌표계가 변환되어도 그에 따라 변화하지 않는 '양' 즉, 단순한 '하나의 숫자' 이다.

특정한 하나의 수치 그리고 단위로 표현이되며 방향이 없다.


● 벡터의 합 ( adding vectors )

벡터 a는 ax, ay로 분할할 수 있다.

 

두벡터 a와 b의 합은 a+b = (ax + bx, ay + by)로 계산하게 된다.

아래의 이미지에서 벡터 a = [4,5], 벡터 b = [3,1]의 합 a+b를 보도록 한다.

*추가*

벡터의 합은 행렬의 합과 동일 하다.


● 벡터의 차 ( substracting vectors )

벡터의 차는 같은 위치의 벡터의 성분끼리 빼주면 된다.

화살표로는 기존의 벡터의 방향을 반대로 돌려주는 것이 ( - ) 해주는 의미가 된다.

벡터의 차는 두 점 사이의 거리를 계산할 때 사용 할 수 있다.


● 벡터의 곱연산

벡터의 곱은 두가지 내적, 외적 으로 나뉜다.

우선 기본적인 벡터곱의 표기부터 알아보도록 한다.

 

벡터곱의 표기

두 벡터 a, b의 벡터곱은 a x b 로 쓸수 있으며 "a cross b" 라고 읽는다.

벡터곱은 교차곱 이라고도 한다.

벡터곱의 정의

두 벡터 a와 b에 모두 수직이 되는 벡터로서, v와 수직이 되는 두 벡터 a와 b는 공간 속의 평면 위에 있는 한 평행 사변형의 두 변을 이루게 되며, 그 벡터의 길이(힘의 크기) lvl는 평행사변형의 면적과 같다.

벡터곱 계산을 쉽게 기억하는 방법

벡터 a와 b의 요소(component)를 두번씩(123)(123) 세로로 정렬한후 두번째 행부터 순차적으로 대각선으로 곱하면

v1, v2, v3를 구할 수 있다.


● 벡터의 내적 ( Inner Product )

벡터의 곱은 내적과 외적 으로 나뉜다.

어려운 단어들이 잔뜩 있다.. 일단 간단하게 개념먼저 확인하도록 하자.

아래의 이미지는 내적과 외적을 보기 쉽게 표로 정리해 둔 이미지 이다.

(이미지에 표기된 출처 사이트에 다양하게 정리되어있으니 나중에 꼭 한번더 참고하자)


내적의 표기

내적의 정의

R^n 내의 두 열 벡터 a,b 에 대하여 곱 T(a)b 의 결과인 단일 성분을 갖는 1 * 1 행렬,

즉 하나의 실수인 스칼라(Scalar)가 내적이 된다.


● 벡터의 외적 ( Outer Product )

 

솔찍히 정리하면서 너무 햇갈리고 어려운 개념들이었다..

아직 이해는 되지않지만 하나씩  차근차근 읽어보고 반복해서 보도록 해야겠다.

특히 참고하면 좋을 것 같은 자료는 아래에 따로 첨부하도록 한다.

벡터의 곱부분이 정말 어렵다..

 

https://rfriend.tistory.com/145

 

R (6) 벡터의 곱 - [1] 내적 (inner product, dot product, scalar product, projection product)

지난번 포스팅에서는 벡터의 기본 개념과 벡터의 합, 차, 스칼라배에 대해서 알아보았습니다. 이번 포스팅에서는 2가지의 벡터의 곱중에서 먼저 내적(inner product, dot product, scalar product, projection pr

rfriend.tistory.com

https://rfriend.tistory.com/146

 

R (7) 벡터의 곱 - [2] 벡터곱 (cross product, vector product), 외적(outer product)

지난번 포스팅에서 벡터의 곱 첫번째로 내적 (inner product, dot product, scalar product, projection product)에 대해서 알아보았습니다. 이번에는 벡터의 곱 두번째로 벡터곱(vector product, cross product)과 외적 (out

rfriend.tistory.com

 

댓글