[miniRT] 핵심개념 - 벡터란?

sham·2022년 5월 20일
0

[miniRT]

목록 보기
15/19

3차원 공간을 구현할 때 점의 위치, 방향을 수학적으로 계산하기 위해 벡터를 사용하게 된다.

수학, 과학에서의 백터는

물리학과 공학에서 방향과 크기,

선형대수학에서 벡터 공간의 원소,

기하학에서 크기와 방향을 갖고 있는 개념을 수학적으로 표현한 것이라는 의미를 담고 있다.

컴퓨터에서 벡터는

화상의 표현 요소로서의 방향을 지닌 선,

동적 배열 자료구조,

기계 학습 분야에서 입력 데이터를 표시하는 방법을 의미하게 된다.


백터의 기초

  • 속력 : 크기 / 시속 100km
    • 스칼라
  • 속도 : 크기 + 방향 / 시속 100km로 동쪽으로 달렸다
    • 백터

크기와 방향을 갖는 양을 벡터라고 한다.

화살표를 이용하면 크기와 방향을 전부 표현할 수 있다.

  • 길이 → 크기
  • 방향 → 방향

벡터가 시작하는 점을 시점, 끝나는 점을 종점이라고 한다.


백터의 길이

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F6d962fc6-6052-49cb-b729-171fd2515263%2FUntitled.png&blockId=4c1e7572-3ce5-40fd-b7fa-3b29e0a03724

기하학적으로 벡터의 크기는 방향을 가진 선분의 길이이다. 벡터의 성분이 주어졌다고 할 때, 우리는 피타고라스 정리를 활용해 벡터의 크기를 알 수 있다! (|A| 는 벡터 A의 크기를 나타낸다)

직각삼각형의 빗변의 제곱은 다른 두 변의 제곱을 더한 것과 동일하다. 여기서 루트를 씌워서 제곱근을 없애면 빗변의 길이, 벡터의 길이를 알 수 있게 된다.

a=x2+y2a = \sqrt{x^2 + y^2}
A=x2+y2|A| = \sqrt{x^2 + y^2}

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fc5aa1272-99bb-4488-be01-669e699945bc%2FUntitled.png&blockId=42b4c836-6a5e-4338-aab4-20e90a92fe64

A=x2+y2+z2|A| = \sqrt{x^2 + y^2 + z^2}

3차원 벡터도 위의 방식을 사용하면 어렵지 않게 표현할 수 있다.

벡터의 크기와 방향 복습 (개념 이해하기) | 벡터 | Khan Academy


단위 백터

**단위벡터 (Unit Vector) = 방향 벡터**

백터의 단위가 1일 경우 단위 백터라고 한다.

크기가 항상 1로 고정되어 있기에 방향을 나타내는데 집중되어 있다고 할 수 있다.

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fe46d99a8-565f-429e-bb86-29f2974a12c2%2FUntitled.png&blockId=c827b85a-6391-4bd4-a42b-5892aacab1bc

단위 벡터는 크기는 1이지만 방향을 가지고 있으므로, 여기에 값을 곱해주면 방향은 같지만 크기가 다른 벡터를 마음대로 만들 수 있다. 혹은 크기는 무시하고 방향만 나타내기 위해서 사용한다.

모든 벡터는 정규화(normalize) 과정을 거쳐 단위 벡터로 만들 수 있다. 벡터 U를 (x, y)라고 했을 때, 정규화를 하는 식은 아래와 같다.

U=(xx2+y2,y/x2+y2)U = ({x\over\sqrt{x^2 + y^2}}, {y\over / \sqrt{x^2 + y^2}})

위 식은 벡터의 각 성분에 벡터의 크기(길이, 스칼라)를 나눠준 것이다!


영백터

시점과 종점이 똑같은 백터를 영백터라고 한다.

방향을 고려하지 않기에 백터의 조건을 충족하지는 않지만 크기가 0이기에 영백터라고 부른다.


역백터

크기는 같고 방향이 정 반대인 벡터, 백터의 시작점과 종점이 바뀐 것을 의미한다.

A 벡터의 역벡터는 -A벡터이다!


법선 백터

**법선벡터 (Normal Vector)**

법선벡터는 어떤 표면(평면)에 수직인 뱡항으로 뻗어나가는 벡터이다.

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fcd27de6f-6632-4af0-aeb9-cae984a2af13%2FUntitled.png&blockId=7c3153b4-9c24-43d8-97f3-b6ae19de8ee8

data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

컴퓨터 그래픽스에서는 모든 Normal Vector(법선벡터)를 Unit Vector(단위벡터)로 표현한다. 따라서 아래의 식을 활용해 구할 수 있다. (단위벡터로 표현하기 위해서는 벡터의 크기만큼 나눠주어야 한다.)

(V1×V2)V12+V22(V1 \times V2) \over \sqrt{|V1|^2 + |V2|^2 }

위에서 나오는 벡터 x 벡터 연산은 벡터의 외적을 구하는 수식이다.


동일한 백터

크기, 방향이 동일할 경우 위치에 상관없이 같은 백터가 된다.

크기는 같지만 방향이 정반대인 경우 -를 붙인다.

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


백터의 덧셈

벡터의 덧셈은 그림으로 보면 엄청 간단하다.

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F30ce080e-6155-44bc-9a7b-3173fd4ce290%2FUntitled.png&blockId=87b94f8a-b80a-472b-bbbb-cc6c5b658516

출처 : https://ansohxxn.github.io/c++ games/chapter3-2-1/

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb0b13b32-03dd-4ef3-953c-aa7491b4f52c%2FUntitled.png&blockId=e6c9a85b-de90-4e5c-b5f4-86f94b2ec6f5

출처 : https://ansohxxn.github.io/c++ games/chapter3-2-1/

**어디서 사용할까?**

  • 좌표를 이동시킬 때 많이 사용된다!

**벡터의 뺄셈**

A벡터 - B벡터는 A벡터 + (-B)벡터와 같다! -B벡터는 이전에 공부한 역벡터 이다.

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fbbcc54fc-b2fc-42fe-b623-027567aaa107%2FUntitled.png&blockId=8d5d513d-aae0-4726-aa81-70467ee7e1ed

출처 : https://ansohxxn.github.io/c++ games/chapter3-2-1/


백터의 내적

실수(스칼라) 값이 나온다.

벡터의 내적의 정의는 한 벡터의 종점에서 다른 벡터에 수선의 발을 내린 후에 형성되는 직각삼각형의 밑변의 길이와 다른 벡터(B)의 길이를 곱한 값이다. 그림으로 표현하면 아래와 같다.

https://t1.daumcdn.net/cfile/tistory/99DCB1335A17C80723

이를 수식으로 표현하면 다음과 같다.

AB=ABcosθ\vec A \cdot \vec B = |\vec A||\vec B|cosθ

cosθ는 x / y고 A의 길이는 x와 동일하기에 위의 수식을 이렇게도 쓸 수 있을 것이다.

AB=xByx\vec A \cdot \vec B = x|\vec B| \frac{y}{x}

이를 한 번 더 정리하면 최종적으로 다음과 같은 꼴이 된다.

AB=yB\vec A \cdot \vec B = y|\vec B|

과제에서 백터의 내적 구하기

백터의 내적 구하기

내적의 특징

동일한 벡터의 내적은 벡터의 길이의 제곱

https://t1.daumcdn.net/cfile/tistory/99450C335A17C3B036

https://t1.daumcdn.net/cfile/tistory/99CE07335A17C55C12

내적의 특징으로 동일 한 벡터가 있을 경우에는 두 벡터가 이루는 각은 0도이므로 cos0 = 1. 그러므로 벡터 a의 절대값( 길이 )의 제곱이 되는것을 알 수 있다.

단위벡터 끼리의 내적은 두 벡터 간 각도의 코사인

https://t1.daumcdn.net/cfile/tistory/99D37D495C4722D70C

결과값이 0이라면, 두 벡터는 직각이다.

결과값이 0보다 크다면 두 벡터간 각도의 θ는 예각이다.

결과값이 0보다 작다면 두 벡터간 각도의 θ는 둔각이다.

[3D 게임 프로그래밍을 위한 기초 수학] 3. 벡터의 연산 - 내적과 외적

[3D수학] 벡터의 내적

좌표 평면에서 내적 구하기

  • A의 길이 B의 길이 코사인세타
  • A가 (4, 2), B가 (4, 0)일 경우 (4 4) + (2 0)

https://www.youtube.com/watch?v=2aNkZjGeonA&list=PLxz77rwoJPpXjltDYVC7KHqXEp-ejZaCJ&index=3

백터의 외적

백터 값이 나온다.

3차원 좌표평면에서만 정의하는 개념이다.

크기와 방향을 가진다.

외적의 크기 : 두 백터를 변으로 하는 평행사변형의 넓이다.

외적의 방향 : 두 백터와 동시에 수직인 방향을 가리킨다.

외적의 특징

단위 백터끼리 외적하면 단위 백터가 나온다!

단위 백터끼리 외적하면 단위 백터가 나온다!

중요하니까 두 번 강조했다.

백터 A와 백터 B의 외적을 구하는 방법.

• 벡터의 외적은 위와 같은 식으로 표현되는데 이것은 아래와 같이 행렬식을 이용해서 계산하면 추론할수 있다.

  • 외적의 크기 : 백터 A의 크기 백터 B의 크기 사인세타
  • 외적의 방향 : 오른손 법칙을 이용, 수식의 왼쪽에 해당하는 백터를 손으로 가리키고 말았을 때 오른쪽에 해당하는 백터를 가리킬 때 엄지가 가리키는 방향이 된다.

https://www.youtube.com/watch?v=3GsBaTqxcjM&list=PLxz77rwoJPpXjltDYVC7KHqXEp-ejZaCJ&index=4


과제에서의 백터

https://oopy.lazyrockets.com/api/v2/notion/image?src=https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fef837427-6f33-45cd-8682-ba1b9c3eb443%2FUntitled.png&blockId=7d838ae3-90f4-41ae-824a-25180e9ad961

출처 : https://ansohxxn.github.io/c++ games/chapter3-2-1/

벡터는 <기하학>에서의 개념이지만 <대수학>영역인 프로그래밍에서 어떻게 쓰이는지를 잘 파악해야 한다.

Vector2(x, y), Vector3(x, y, z) 으로 나타낼 수 있다.

x, y, z 는 각각 벡터의 성분이 된다.

  1. 위치 좌표로 쓰임 (절대좌표)
  • 사실 위치 좌표는 스칼라로 보이더라도 이 또한 원점을 시작점으로, 해당 위치를 종점으로 하여 화살표로 이어진 벡터라고 해석할 수 있다.
  • 위치 좌표로서의 Vector2(2, 4)는 Vector2(0, 0) 원점을 시작점으로 했을 때  Vector2(2, 4)로 향하는 벡터라고도 할 수 있다.
  1. 벡터로 쓰임 (상대좌표)
  • 어떤 방향으로 얼마만큼의 크기 만큼 변화했는지의 정도

[Cub3D] Vector 란?

(2) 벡터에 대한 이해!

profile
씨앗 개발자

0개의 댓글