CS/Computer Graphics

[Graphics Study] 수학 기초

Yeji Heo 2022. 10. 17. 13:13

컴퓨터 그래픽스는 선형대수(행렬, 벡터)가 기본이므로..

1. 간단히 행렬에 대한 복습

1. square matrix(정사각 행렬)

m x n matrix에서 m=n

 

2. 행렬 곱

A행렬의 열과 B행렬의 행이 같을 때 즉, A가 l x m, B가 m x n일 때만 가능. (l x m matrix)

A와 B를 곱하려면 A의 행 성분, B의 열의 대응하는 곱을 하나씩 곱.

 

3. Row vector, Column vector

Direct 3D는 row vector, OpenGL은 column vector사용.

 

4. Identify matrix(단위행렬)

어떤 행렬과 곱하더라도 그 행렬을 유지.

(1, 0)                        (1, 0, 0)

(0, 1)           or          (0, 1, 0)             처럼 대각선만 1이고 나머지는 0 인 경우

                                (0, 0, 1)

두 행렬을 곱해 AB=I 가 되었을 때 B = A^(-1). (역행렬.Inverse. A도 마찬가지.)

 

5. 2D vec, 3D vec

좌표는 (x, y) / (x, y, z)

크기는 각각을 제곱해서 루트

정규화는 자기벡터를 자기자신의 길이로 나눔

-> 정규화 된 벡터는 길이가 1 = 단위 벡터(Unit Vector)

 

2. Graphics에서의 수학

1. 2차원 공간

- Coordinate System(좌표계, Space)는 origin(원점)과 basis(기저)로 구성된다.

 

- Standard basis: 2D에서 e1(1,0), e2(0,1).

Orthonormal하면서 다른 모든 벡터를 표현 가능한 기저이다.

이 녀석은 2D 공간의 모든 벡터를 선형조합(Linear Combination) 형태로 표현 가능하게 한다.

 

- Orthonormal: Orthogonal + normalized.

e1과 e2가 90도를 이루고(Orthogonal), 둘은 각각 단위벡터(길이가 1).

그리고 단위벡터를 만드는 과정 Normalization.

 

정리하자면,

Standard basis를 통해 다른 모든 벡터를 만들 수 있다.

가령, (3,5)를 표현하고 싶다면 (3,5) = 3e1+5e2로 표현 가능하다.

그런데 e1(1,1)과 e2(0,2)등 다른 좌표 조합으로도 (3,5)를 만들 수는 있다. Standard일까? NO

각 좌표가 x,y축을 따라 평등하게 나란히 이어지지 않으므로(Orthonormal하지 않다) Non-Standart이다.

 

Standard가 아니라도 Orthogonal 할 수는 있다.

각도가 90도이고 길이가 1

위 예시는 Orthonormal하지만 Standard basis는 아니다.

 

2. 3차원 공간

3D에서 Standard basis는 2D와 같은데 z좌표만 추가했다고 보면 된다.

3D에서의 Standard basis

위 예시 외에도 Standard는 아니겠지만 다양한 Orthogonal basis들이 존재한다.(2D와 마찬가지로)

 

3. Graphics에서의 수학

1. Dot Product(내적, Inner Product)

n차원의 좌표(a1, a2, ..., an), (b1, b2, ..., bn)이 주어졌을 때 둘의 내적은 a⋅b로 표기.

계산은 a1b1+a2b2+...anbn

 

이건 대수적인 정의. 또 다른 정의는 ||a|| ||b|| cosθ 

e1(0,1), e2(1,0)의 예시에서, cosθ의 θ가 90도(cos90 = 0) 이므로 값은 a,b를 생각할 필요도 없이 0이다. 

이와 관련하여 cosθ가 예각이면 내적은 양수, 둔각이면 음수이다.

 

단위벡터v를 내적하면 (vv) 1이다. 왜?  vv = ||v|| ||v|| cos0 = 1. 

Orthogonal(수직)인 벡터끼리 내적하면 앞서 말한대로 0.

 

2. Cross Product (3차원 벡터에서만 정의된다.)

Cross Product의 결과 값은 또 다른 3차원 벡터. 이 값은 어느 방향/길이를 가질까?

- 방향: 오른손 법칙

손가락 4개를 접은 부분이 a->b로 움직일 때, 엄지손가락의 방향이 Cross Product의 방향이다.

-길이: a x b 의 길이는 ||a|| ||b|| sinθ (θ는 a, b의 각도)

a, b가 만들어내는 평행사변형의 면적이 a x b의 길이이다.

그러므로 a=b라면 방향이 같으므로 zero vector(0,0,0). 평행사변형의 면적은 0.

b x a는 방향이 반대이므로 엄지손가락의 방향도 반대일 것이다. (길이는 같다. 평행사변형의 길이가 같으니)

 

3. Line, Ray, Linear Interpolation

선분을 수학적으로 나타내려면 어떻게 해야할까?p0에서 p1으로 이어지는 선분은 p1-p0.

p0~p1에 존재하는 매개변수 t에 따라 p(t) = p0 + t(p1-p0)즉, t가 0이면 p0, 1이면 p1이 된다.

 

t가 [-∞, ]이면 무한한 직선이다.t가 [0, ]이면 "->" 방향으로만 진행된다. 이를 Ray라고 한다.

t가 [0,1]이면 명확한 Line segment가 생성된다. 

 

p0과 p1사이의 모든 점들은 양 끝점(p0, p1)을 선형보간해서 만들 수 있다.

예를 들어 RGB색깔표현 등에서 노랑(p0), 파랑(p1)두 점이 있다면 그 사이의 pt(t=0.5)초록을 얻을 수 있다. (그 외, 그 사이 다른 t 색깔들도 모두 선형보간하여 만들 수 있다.)