티스토리 뷰

한국어로 선형대수, 영어로 Linear Algebra라는 부르는 수학의 한 분야는 컴퓨터 알고리즘과 수학 알고리즘이 거의 일치한다. 선형대수를 제외하면 대부분은 흔히 우리가 수업 시간에 배우는 analytical method와 실제로 컴퓨터로 해를 구하고자 했을 때 적용하는 numerical method(수치 해석) 사이에 상당한 방법론적 차이가 존재하기 때문에 따로 수치 해석이라는 것을 따로 배워야 프로그래밍이 가능하다. 하지만 선형대수는 교실에서 배운 알고리즘을 그대로 컴퓨터로 프로그래밍하여  쓸 수 있다. 심지어 BLAS(Basic Linear Algebra Subprograms) 라는 프로그래밍 표준 사양까지 정의하고 있다.

거의 모든 공대생들이 사랑하는 선형대수는 다른 수학적 배경 지식 없이 4칙 연산을 할 수 있다면 누구나 배울 수 있다는 장점이 있다.  하지만 실제 선형대수 이론들의 증명을 이해하거나 설명하는 것은 오히려 더 까다롭게 느껴진다. 선형대수 책을 펴 보면 알겠지만 대다수 증명들은 말로써 증명된다. 수학 공식을 통한 증명이 증명에 동원되는 공식들을 알고 있다면 따로 크게 고민없이 깨끗이 이해되는 반면 흔히 말하는  Mathmatical Induction(수학적 귀납법)을 통한 증명 또는 기하학적 모델을 통한 증명 등은 책이나 강사가 도와 줄 수 있는 범위가 제한적이다. 어쩔 수 없이 각자 머리 속에 그려서 이해하는 수 밖에 없다.선형대수의 강점 중 또 다른 하나는 증명이나 이론을 하나도 이해하지 않아도 실제로 응용하는데 전혀 문제가 없다는 점이다. 물론 저런 단편적인 이해로는 당연히 응용에 제한적일 수 밖에 없긴 하지만 널리 알려진 문제들은 곧 바로 교실을 벗어나서 적용하는 것이 가능하다.

선형대수의 기초를 확고히 다지고자 한다면 유튜브에서 MIT의 길버트 스트랭(Gilbert Strang) 교수의 명강의를 시청할 수 있다.

뿐만 아니라 비주얼 이팩트와 함께 선형대수의 기하학적 설명에 집중한 3Blue1Brown의 훌륭한 linear algebra 영상 시리즈물 또한 유튜브에 존재한다.

이론적 설명을 위의 두 영상 보다 더 명쾌하고 자세하게 이 블로그에서 설명할 수는 없다. 이 글에서는 컴퓨터 그래픽에서 적용되는 예를 통해 만일 선형대수를 배우게 된다면 무엇을 꼭 얻어가야 하는지 개인적인 생각을 적고자 한다.

오픈소스 벡터 드로잉 라이브러리인 cairo 라이브러리를 익히기 위해 아래의 프로그램을 제작했었다. 아래와 같은 프로그램을 작성하기 위해서는 공이 반사되는 반사 각을 구해야 하고 공이 벽면과 만나는 지점을 구해야 한다. 너무 단순해 보일지 모르지만 더 복잡한 상황을 고민하기 위한 시작 점으로 아주 좋은 예제라고 생각한다.

이상적인 공은 빛의 반사되는 방식과 동일한 방식으로 튕겨진다. 빛은 입사 각과 반사 각이 일치하게 반사된다.

수평 면에 반사되는 직선을 구하는 공식은 원래 입사되는 직선을 y=ax라고 했을 때 반사되는 지점을 원점으로 놓으면 y=-ax가 된다.  오른쪽 수직 면에 부딪쳤을 때는 이후 공의 진행이 x값이 감소하는 방향으로 이동하고 왼쪽 벽에 부딪쳤을 때는 x 값이 증가하는 방향으로 이동할 뿐 기본 방정식 y=-ax라는 사실에는 변함이 없다. 

다음으로 고려해야 할 점은 실제 공이 벽면과 만나는 지점이다. 실제로 구해야 하는 좌표는 원과 벽면이 만나는 지점의 좌표가 아니라 원이 벽면과 만났을 때 원의 중심이다. 벽이 수직 수평 이었을 때 그 지점을 구하는 것은 아래 그램에서 볼 수 있듯이 크게 어렵지 않다.

볼이 진행되는 궤적의 방정식은 이미 알고 있으므로 아래 수평 면과 만났을 때는 y에 r값을 대입해 x좌표를 구하고 오른쪽 수직 면과 만났을 때는 x 값에 윈도우 넓이 - r을 궤적 방정식에 넣어 원의 중심 y값을 구하면 정확한 지점을 구할 수 있다. 수평 면이 위에 있거나 수직 면이 왼쪽에 있을 때도 대입되는 x값과 y값이 조금 변할 뿐 기본 방식은 동일하다.

지금까지 살펴 본 바와 같이 총 6가지의 상황만 고려하면 계속 튕겨져 나오는 볼을 애니메이션을 구현할 수 있다. 하지만 이런 방식은 아주 특수하고 단순한 상황에 국한되어 적용할 수 있는 방식이다. 만일 기울어진 반사 면이 있다고 생각해 보자. 그 반사 면과 원이 만나는 지점을 어떻게 구할 수 있을까? 또는 원과 원이 부딪쳤을 때 공은 어떻게 튕겨 나갈까? 만일 사각형의 모서리에 부딪친다면 공의 반사 각을 어떻게 구할 수 있을까? 이런 문제를 해결하기 위해서는 특수한 상황에만 적용할 수 있는 위의 방식을 넘어 어떤 상황이든 일반적으로 적용될 수 있는 공식을 찾아야 한다. 물론 이런 문제를 기본 기하학 지식과 직선의 방정식을 이용해 해결 할 수도 있을 것이다. 하지만 이미 잘 정립된 계산 방식이 있다면 스스로 방법을 찾기 보다는 인류가 이루어 놓은 지식의 축적을 이용하는 것이 효과적일 것이다. 이후 글에서는 이 문제를 해결하기 위해 선형대수의 알고리즘을 적극 활용할 것이다. 이런 과정을 통해 선형대수에서 무엇을 얻어수 있는지 느낄 수 있었으면 좋겠다.

댓글
공지사항
최근에 올라온 글
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함