새소식

인기 검색어

게임 개발/그래픽스

벡터

  • -

벡터는 굵은 소문자, 행렬은 굵은 대문자 사용.

벡터

  • 벡터는 방향과 크기 (direction and magnitude)
  • 두 벡터의 방향과 길이가 같으면 같은 벡터
  • 벡터는 위치 무관

변위(displacements)

시작점과 상관없이 미는 정도(u).

이동을 벡터를 사용해서 표현할 수 있다.

좌표계에서 벡터의 좌표

벡터를 좌표계에 표현가능

벡터의 표준 위치

벡터의 꼬리를 0,0(원점)에 놓으면 표준위치.

좌표계

왼손 좌표계 vs 오른손 좌표계

 DirectX, Unreal Engine 등은 왼손좌표계를 사용.

Opengl, Vulkan, 컴퓨터 비전 쪽 등은 오른손 좌표계 사용.

통일되지 않았음.

기본적인 벡터 연산

벡터의 길이

단위 벡터(unit vector)

내적 (Dot Product)

Orthogonal Projection

Orthogonalization

  • 조건:
  • Orthogonal Set이 되려면 집합 안의 벡터들이 같은 벡터면 안된다. 서로 다른벡터여야 한다.
  • 0 벡터(길이가 0인 벡터)가 포함이 되면 안된다. (dot product하면 무조건 0나오기 때문)

Ortho -> 수직의 라는 뜻이다.

생각해보면 서로 다 수직이여야 하기 때문에

2차원이면 벡터2개 밖에 넣지 못한다.

3차원이면 벡터3개.

임의의 벡터집합 {v0, v1}을(orthogonal 한지 안한지 모르는 렌덤한 벡터 두개를) {w0, w1}으로 변환할때 한 벡터는 유지하고 나머지 한 벡터를 찾는다.

그 유지한 벡터에 새로운 임의의 벡터 v1을 프로젝션한 만큼을 다시 v1에 빼주면 w1을 찾을 수 있음.

Gram-Schmidt Orthogonalization

차원을 높여서 임의의 차원에서도 orhogonalization을 할 수 있다.

그램 슈미트 orthogonalization.

https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process

 

Gram–Schmidt process - Wikipedia

From Wikipedia, the free encyclopedia Orthonormalization of a set of vectors The first two steps of the Gram–Schmidt process In mathematics, particularly linear algebra and numerical analysis, the Gram–Schmidt process or Gram-Schmidt algorithm is a met

en.wikipedia.org

동영상으로 이 과정을 보면 이해가 쉽다.

외적 (Corss Product)

주의:

  • 같은 방향이거나 정확히 반대방향인 벡터 2개에 외적 구하는 건 의미 없음. 두 벡터로 한 평면이 정의가 되는데 그 평면에 수직인 벡터를 찾는 과정인데, 같은 방향인 벡터2개면 평면자체부터가 정의가 안됨.
  • 왼손좌표계, 오른손 좌표계 신경써야함. 계산순서에 따라 방향 달라짐

Pseudo 2D Cross Product

Orthonormalization with the Cross Product

외적을 이용해서 Orthonomalization을 할 수 있다.

포인트(point)

포인트 연산

  • 포인트에서 포인트 빼면 벡터가 나온다.
  • 포인트에 벡터 더하면 다시 포인트가 나온다.

왜 외적 대신 Gram-Schmidt 방식을 사용할까요?

세 벡터가 주어졌을때, 외적 두번을 하면 서로 수직인 벡터 3개를 구할 수 있는데 굳이 왜 복잡하게 저런 방식을 굳이 사용할까 하는 의문이 들어서 chat GPT통해서 찾아본 결과입니다.

 

혹시 같은 의문을 가지신 분이 계실까봐 정리한 글 남겨봅니다. 혹시 틀린 내용있다면 댓글 남겨주세요.

 


ChatGPT

 

Q: 외적 두번이면 서로 수직인 벡터 3개를 구할 수 있는데 굳이 Gram-Schmidt 방식을 쓰는 이유? Gram-Schmidt 방식의 존재 의의?

 

Gram-Schmidt 정규화 과정의 존재 의의는 다음과 같은 몇 가지 중요한 이유로 설명할 수 있습니다:

  1. 차원의 일반화: Gram-Schmidt 과정은 3차원 공간에만 국한되지 않고, 더 높은 차원의 공간에서도 사용될 수 있습니다. 벡터의 크로스 프로덕트는 3차원 공간에서만 정의되고 사용되기 때문에, 더 높은 차원의 공간에서 벡터들을 정규화하고 직교화하기 위해서는 Gram-Schmidt 과정이 필요합니다.
  2. 기존 벡터 세트의 보존: Gram-Schmidt 과정은 주어진 벡터 세트를 유지하면서 이들을 직교화합니다. 즉, 원래의 벡터 세트가 가지고 있는 방향성이나 구조를 유지하면서 직교화를 수행합니다. 반면, 크로스 프로덕트를 사용하는 방법은 완전히 새로운 벡터를 생성하기 때문에, 원래 벡터 세트의 특성을 완전히 보존하지 못할 수 있습니다.
  3. 알고리즘의 유연성: Gram-Schmidt 과정은 벡터 세트가 선형 독립인 경우에만 적용되는 것이 아니라, 선형 의존성이 있는 벡터들에 대해서도 적용할 수 있습니다. 이 과정을 통해 선형 의존적인 벡터들을 제거하고 직교 기저를 생성할 수 있습니다.
  4. 수학적 정확성 및 안정성: 크로스 프로덕트를 사용하는 방법은 계산 과정에서 오차가 발생하기 쉽고, 특히 벡터의 크기가 매우 작거나 서로 거의 평행할 때 정확도가 떨어질 수 있습니다. Gram-Schmidt 과정은 이러한 경우에도 더 안정적이고 정확한 결과를 제공합니다.

따라서 Gram-Schmidt 방식은 높은 차원의 공간에서의 일반화, 원래 벡터 세트의 구조 보존, 선형 의존성 처리, 계산의 안정성과 정확성 등의 측면에서 크로스 프로덕트를 사용하는 방법보다 더 우수하고 유연한 접근법을 제공합니다.

 

Q: 외적이 정확도가 떨어진다는 의미?

 

수학적 계산에서 벡터의 크로스 프로덕트(외적)는 정확한 결과를 제공합니다. 제가 언급한 '정확도가 떨어진다'는 점은 주로 컴퓨터 계산에서 발생하는 문제를 지칭합니다. 컴퓨터를 사용한 수치 계산에서는 다음과 같은 이유로 정확도 문제가 발생할 수 있습니다:

  1. 부동소수점 오차: 컴퓨터에서 실수를 표현할 때 부동소수점 방식을 사용합니다. 이 방식은 실수를 완벽하게 정확하게 표현할 수 없어서 작은 오차가 발생할 수 있습니다. 이 오차는 계산이 반복될수록 누적되어 결과의 정확도에 영향을 줄 수 있습니다.
  2. 근접한 벡터들의 처리: 두 벡터가 서로 거의 평행한 경우, 즉 각도가 매우 작을 때, 컴퓨터는 이 두 벡터의 크로스 프로덕트를 정확하게 계산하기 어렵습니다. 이런 경우, 작은 수치 오차도 결과에 큰 영향을 미칠 수 있습니다.
  3. 오버플로우 및 언더플로우: 매우 크거나 작은 수치를 다룰 때, 컴퓨터는 오버플로우(너무 큰 값 처리 불가)나 언더플로우(너무 작은 값 처리 불가) 문제에 직면할 수 있습니다. 이는 크로스 프로덕트 계산에도 영향을 줄 수 있습니다.

수학적으로는 크로스 프로덕트가 완벽히 정확한 값을 제공하지만, 실제 컴퓨터 계산에서는 이러한 수치 오차를 고려해야 합니다. 이러한 문제들은 Gram-Schmidt 과정에서도 발생할 수 있지만, 이 방법은 특정 조건에서 더 안정적인 결과를 제공할 수 있는 방법론을 가지고 있습니다.

'게임 개발 > 그래픽스' 카테고리의 다른 글

변환 (Transformations)  (1) 2023.11.17
행렬  (0) 2023.11.17
조명  (0) 2023.11.11
블린-퐁 쉐이딩 (Blinn-Phong Shading)  (0) 2023.11.10
원근 투영 (Perspective Projection)  (0) 2023.11.10
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.