d라이브러리









자연의 복잡합을 표현해줄 수 았는 프래탈기하학. 아주 간단한 프로그램으로 컴퓨터에서 프랙탈의 묘미를 만끽해보자.

맨델브로트(Mandelbrot)는 사물이 아주 잘게 '쪼개져 있는' 것을 묘사하는 용어로 프랙탈(fractal)이라는 개념을 만들어 냈고, 또한 이러한 프랙탈 개념을 써서 주어진 풍경이나 그림들을 프랙탈 조각들로 재구성하는 길을 열었다. 이를 기반으로 반슬리(Barnsley)는 주어진 그림의 프랙탈 조각을 찾고, 찾아진 프랙탈 조각들을 아핀 변환의 모임과 관계시켜, 주어진 그림을 컴퓨터로 그려내는 방법을 발견했다. 이제 프랙탈 그림에 숨어있는 프랙탈 수학을 사용해 컴퓨터에서 프랙탈 그림을 그려본다.

자연의 모습에 등장한 「수학 괴물」

(그림 1)의 윗쪽에 있는 그림은 수능시험에도 나온적이 있는 대표적인 프랙탈 그림으로 흔히 코흐곡선(Koch curve)이라 불린다. 아래쪽에 제시된 그림을 통해 우리는 코흐 곡선이 자신과 닮은 네 개의 작은 부분으로 쪼개어질 수 있음을 보게 된다. 뿐만 아니라 코흐 곡선의 임의로 한 부분을 떼어 크게 확대하여도 본래의 코흐 곡선과 비슷한 그림을 얻을 수 있음을 볼 수 있다.
 

(그림 1) 코흐곡선


수학자들은 오래 전부터 이러한 성질을 가진 그림들(코흐곡선, 칸토르집합 등)을 인식하고 있었으나, 대부분 이들은 예외적인 대상으로 여기며 '수학의 괴물'로 여겨왔다. 그러다가 1970년 중반부터 이러한 대상들이 '수학의 괴물'에서 '수학적 실재'로 인정받으며 연구되기 시작한다.

맨델브로트(Mandelbrot)는 이러한 그림에 프랙탈(fractal)이란 이름을 주고 본격적으로 연구를 했는데, 특히 그는 '수학적 괴물'의 성질이 해안선 구름 산 나뭇잎 등의 여러 자연의 모습에서도 볼 수 있음을 주장했다. 이해를 돕기 위해(그림 2)의 나무그림을 살펴보자. 이때 작은 사각형안에 있는 그림을 확대시키면 본래의 나무 모습과 비슷한 그림을 얻을 수 있음에 주목하자.
 

(그림 2)프랙탈 나무


코흐 곡선과 나무의 그림 모두에서 우리는 전체와 부분들 사이에 닮음의 성질이 있음을 보게 된다. 전체와 부분들 사이의 이러한 닮음을 자기닮음(self-similarity)이라하며, 그림의 한 부분을 확대하고 또 확대할 때 본래의 모습과 비슷해지는 그림을 간단히 프랙탈(fractal)그림이라 부른다. 프랙탈이라는 용어는 맨델브로트가 사물이 아주 잘게 '쪼개져 있는'(fractured) 것을 묘사하는 용어로 만들어냈는데, 그는 프랙탈을 파괴돼 있다는 뜻의 프랑스어에서 따왔다고 한다. 따라서 프랙탈의 사전적인 의미로는 '조각' 혹은 '파편'이라는 뜻이며, 또한 소수(fraction, 소수점 이하의 수)라는 의미를 갖고 있기도 하다.
 

(그림 3)시어핀스키 삼각형


하지만 무엇이 조각나 있다는 말인가. 쉽게말해서 전체가 전체의 모양과 닮은 조각들로 조각나 있다는 이야기다. 이제 (그림3)과 (그림4)에서 프랙탈 조각들을 찾아보자. (그림3)은 시어핀스키 삼각형이라 불리며, (그림4)는 고사리 잎 모양그림이다.
 

(그림4)고사리잎


이들은 프랙탈 그림에서 전체와 부분이 서로 닮았음을 잘 보여주는 것이다. 직관적으로 프랙탈 그림이란 전체와 부분이 서로 닮은 기하학적 그림이고, 수학적으로 말하면 프랙탈은 자기 닮음성(self-similarity)과 프랙탈차원(fractal dimension)을 가진 그림이다. 또한 프랙탈 기하는 프랙탈 그림을 연구하는 수학이라고 말할 수 있다.

그렇다면 왜 프랙탈 개념이 인기가 있고 또한 프랙탈 기하가 유용하다고 하는가. 그 이유는 전통적인 기하에서 다루어져 온 그래픽 체계가 인류가 만들어 낸 많은 산물들을 나타내기에는 부족함이 없었으나, 자연이 만들어 낸 산물들을 표현하는데는 부족함이 많기 때문이다. 따라서 전통적인 기하학에 더 풍부한 내용을 보강할 필요성을 느끼게 됐는데, 프랙탈 기하는 바로 그런 도구를 제공한다. 이제 고등학교 수학교과과정에 나오는 행렬 일차변환의 일반화인 아핀변환, 그리고 수렴-극한 등의 개념을 써서 프랙탈 수학과 프랙탈 그래픽의 세계를 살펴보자.


아핀변환의 묘미

앞에서 주어진 그림을 프랙탈 조각들로 나누고, 또한 프랙탈 조각들을 모아 전체를 살펴 보았다. 이러한 관찰에서 출발하여 미국의 조지아 공과대학 교수인 반슬리(Barnsley)는 주어진 그림에서 프랙탈조각을 찾고, 또한 찾아진 프랙탈 조각들을 아핀변환들의 모임과 관계시켜 주어진 그림을 컴퓨터로 그려내는 기발한 방법을 발견했다.

아핀변환은 평면위의 도형을 축소 또는 확대하고, 또한 돌리거나 평행 이동시키는 함수를 말하며, 고등학교 수학에 나오는 행렬의 일차변환에 대한 일반적 개념이다. 수학적으로 말해, 아핀변환이란 좌표평면 위의 점P(x, y)를 다음과 같은 관계식을 만족하는 점 P'(x',y')로 옮기는 변환이다.

$\{\begin{array}{c}{x}^{\prime }=ax+by+e\\ {y}^{\prime }=cx+dy+f\end{array}$     즉,

$\left(\begin{array}{c}{x}^{\prime }\\ {y}{\prime }\end{array}\right)=\left(\begin{array}{cc}a& b\\ c& d\end{array}\right)\left(\begin{array}{c}x\\ y\end{array}\right)+\left(\begin{array}{c}e\\ f\end{array}\right)$

즉 아핀변환은 점(x,y)를 (ax+by+e, cx+dy+f)로 대응시키는 함수로서, 이러한 아핀변환 W는 W(x,y)=(ax+by+e, cx+dy+f)와 같이 쓸 수 있다(여기서 a,b,c,d,e,f는 실수). 이 때 e와 f의 값이 0인 아핀변환은 고등학교에서도 다루는 일차변환임에 주목하자. 여기서의 a,b,c,d 등의 값은 아핀변환 W를 만들어내는 평행이동과 회전, 그리고 확대 및 축소를 분석하여 쉽게 구할 수 있다. 아편변환은 보통 행렬을 사용하여 간단히 표현되는데, 예를 들어 아핀변환 W(x,y)=(x/2+y/4+1, x/4+y/2+2)는 행렬을 사용하여 다음과 같이 표현될 수 있다.

W = $\left(\begin{array}{c}x\\ y\end{array}\right)=\left(\begin{array}{cc}0.5& 0.25\\ 0.25& 0.5\end{array}\right)\left(\begin{array}{c}x\\ y\end{array}\right)+\left(\begin{array}{c}1\\ 2\end{array}\right)$

이제 컴퓨터 그래픽을 이용하여 아핀변환을 느껴보자. 이를 위해 하이텔과 천리안 공개 자료실에 있는 fractal.arj과 mal10t.exe가 들어 있는 mal10t.arj을 받아 풀자(mal10t.exe는 1994년 12월까지 베타버전으로 공개 되어 있다). 이렇게 말 언어와 프로그램을 받아 한 디스크에 담은 후에, mal10t 명령으로 말 언어에 들어간후 run "파일이름" 명령으로 원하는 프로그램을 실행시켜 보자. 또한 가능하면 Esc키로 조그만 에디터에 들어가거나 또는 edit명령으로 큰 에디터에 들어가서 프로그램의 확률이나 아핀변환의 계수 등을 고치며 다른 그림을 그려보자. 이때 에디터 안에서 F1 키를 누르면 지금 고친 프로그램이 자동으로 실행된다. 또는 Esc키로 말 에디터를 나온 후 run 명령으로 프로그램을 실행시킨다. 에디터에서는 F3 키를 두번 눌러 블럭을 만들고 복사 등의 블럭 명령을 시행할 수 있다. 또한 고친 프로그램은 save "파일이름" 명령으로 저장된다.

mal10t 명령으로 말 언어 텍스트 창에 들어간 후, logo명령을 하면 말 언어의 그래픽 창으로 가게된다. 말 언어는 640X480 VGA 카드를 640X400 모드로 변환하여 컬러 처리를 한다. 이 때 액정화면 등에서 화면이 짤릴 수 있다. 이때에는 그래픽 상태로 가기전에 system "ega" 명령으로 그래픽 카드를 ega 상태로 바꾸어 들어가도록 하기 바란다. 현재 제작되고 있는 완성판 1.0에서는 640X480 모드도 지원하여 이러한 불편을 개선시키고 있다. 또한 그래픽 상태에서 한글을 쓰려고 할 때, 키보드에 있는 한글/한자 변환키를 사용 하지 말고 Shift+Space 또는 F9 키를 눌러 사용한다. 말 언어는 대화형 언어이기에 대화 내용이 컴퓨터 메모리에 하나 하나 기록되며 진행된다. 따라서 MEMORY FULL이란 메시지를 받을 때가 있다. 이때는 화면에서 제시하는 방법과 같이 베이식언어의 명령과 같은 clear 명령을 하거나 Ctrl+BackSpace 키를 누른다.

no memory 메시지는 완성품에서 고쳐지고 있다. 또한 mouse 명령을 하면 거북이가 십자모양의 마우스로 변하는데, 이후 마우스를 이용하여 그림을 그릴 수 있다. 참고로 마우스에서 거북이로 돌아가는 명령도 역시 mouse 이다.

이제 말 언어에 들어가서 run "affin" 명령을 하여 affin.mal 프로그램을 실행시키자. 이때 함수변수가 a,b,c,d,e,f인 함수 aff( )가 정의된다. 이후, aff(3,-2,-2,3,33,22), 와 같이 명령하면 주어진 아핀변환에 의해 어떻게 점선으로 주어진 정사각형이 아핀변환되는지를 보여준다. 함수 aff( )의 변수 a,b,c,d,e,f의 값을 바꾸며 연습하여 보아라.

주어진 그림을 프랙탈 조각들로 재구성했다 하자. 이때 프랙탈 조각들 사이의 관계를, 자기닮음성을 그려줄 수 있는 아핀변환들의 모임을 통해 표현할 수 있다. 이렇게 찾아진 아핀변환들의 모임을 IFS(Iterated Function System)라고 부르는데, 우리는 찾아진 IFS를 사용해서 건축가가 집을 묘사하는 것처럼 산과 구름같은 복잡한 그림을 정의하고 또한 표현할 수 있다. 프랙탈 조각들과 이들의 IFS를 통해 자연의 여러 모습을 그려내는 작업은 매우 재미있는 일이다.

이제 (그림3)에 제시된 시어핀스키 삼각형(왼쪽)과 오른쪽에 제시된 프랙탈 조각, 그리고 이것의 IFS를 살펴보자.

여기서 제시된 3개의 프랙탈 조각들은 본래의 시어핀스키 삼각형을 1/2배 한 후, 위로 옆으로 자리를 이동시켜 얻을 수 있다. 즉 각각의 프랙탈 조각에서 다음과 같이 3개의 아핀변환을 얻을 수 있는데, 여기서 정의된 세개의 변환 W₁, W₂, W₃들은 본래의 그림을 1/2로 축소시킨 후, W₁(0,0)=(0,0)이 되고, W₂(0,0)=(0.5,0)이 되고, 그리고W₃(0,0)=(0.25,0.5)이 되도록 위치변환(평행이동)을 시키는 아핀변환이다.

W₁ $\left(\begin{array}{c}x\\ y\end{array}\right) =\left(\begin{array}{cc}0.5& 0.0\\ 0.0& 0.5\end{array}\right)\left(\begin{array}{c}x\\ y\end{array}\right)+\left(\begin{array}{c}0\\ 0\end{array}\right)$

W₂ $\left(\begin{array}{c}x\\ y\end{array}\right) =\left(\begin{array}{cc}0.5& 0.0\\ 0.0& 0.5\end{array}\right)\left(\begin{array}{c}x\\ y\end{array}\right)+\left(\begin{array}{c}0.5\\ 0\end{array}\right)$

W₃ $\left(\begin{array}{c}x\\ y\end{array}\right) = \left(\begin{array}{cc}0.5& 0.0\\ 0.0& 0.5\end{array}\right)\left(\begin{array}{c}x\\ y\end{array}\right)+\left(\begin{array}{c}0.25\\ 0.5\end{array}\right)$


이 세개의 아핀변환은 (그림6)에 있는 정사각형 A를 그 옆에 세개의 사각형으로 이루어진 그림으로 각각 옮겨줌에 주목하자. 즉 (그림6)의 첫번째사각형 A에 대해 W(A)가 W₁(A) W₂(A) W₃(A)로 대응되는 함수라면, W(A)는 (그림6)의 오른쪽이 된다.
 

(그림6)아핀변환 W₁,W₂, 그리고 W₃


(그림6)의 첫번째 사각형 A에 대해 ${W}^{2}$(A)를 W(W(A))라 하고 ${W}^{3}$(A)를 W(W(W(A)))라 하자. (그림7)에는 n의 값이 변화할 때 ${Wn}^{n}$(A)의 모습들이 어떻게 변환되는지를 보여준다. 여기서 n이 무한대로 갈 때 ${W}^{n}$(A) (즉 lim ${W}^{n}$(A))은 시어핀스키 삼각형으로 변환됨을 볼 수 있다. (그림7)의 왼쪽은 W(A)이고 오른쪽은 ${W}^{2}$(A) 이다. (그림8)은 n의 값이 4,5,6으로 변화할때 ${W}^{n}$(A)의 모습들이 어떻게 변화하는지를 보여준다.
 

(그림7)W(W₁(A)uW₂(A)uW₃(A))


미술의 기법중에 색종이를 찢어서 그림을 만드는 콜라주라는 것이 있다. 이제 시어핀스키 삼각형이 갖고 있는 성질을 위에서 소개한 아핀변환 ${W}_{1}$, ${W}_{2}$, ${W}_{3}$과 앞에서 정의된 변환 W, 그리고 미술의 콜라주기법을 가지고 그려 보자. 우선 시어핀스키 삼각형을 S라고 표시 할때 S=${W}_{1}$(S) ${W}_{2}$(S) ${W}_{3}$(S)라는 관계식, 즉 W(S)=S라는 식이 성립함에 유의하자. 따라서 S는 S를 1/2배하여 평행이동시킨 3개의 그림 ${W}_{1}$(S), ${W}_{2}$(S), ${W}_{3}$(S)를 찢어붙이면 만들어진다. 즉 S는 W에 의해 불변(즉 W(S)=S)이며, 이 말은 시어핀스키 삼각형이 W(X)=X 라는 방정식의 해가 된다고 할 수 있다. 따라서 시어핀스키 삼각형 S에 속한 임의의 점 p를 잡으면 그 점은 W(p)∈S를 만족시킨다.
 

(그림8) 사이핀스키 삼각형의 예
 

그런데 S밖에 있는 점이라도 W를 반복하여 작용시키면 그 값이 S로 수렴하는 것이 알려져 있다. 따라서 임의의 점을 잡아 W를 작용시킨 후, 10여번 지난 후부터 컴퓨터 화면에 점을 찍기 시작하면 S의 모습이 점점 화면에 나타나기 시작한다. 이때 W 대신에 난수 함수인 rnd( )를 사용하여 ${W}_{1}$ ${W}_{2}$ ${W}_{3}$를 임의적으로 하나씩 택해도 같은 그림을 그리고 있다. 이러한 방법을 난수되먹임 알고리즘(Random Iteration Algorithm)이라고 한다.
 

(그림9) sier.mal의 실행결과
 

왜 이러한 방법이 W(X)=X라는 식을 만족하는 시어핀스키 삼각형 S를 그리는 것일까? 그 이유는 대학수준의 수학으로 설명될 수 있다. 다음은 난수되먹임 알고리즘으로 시어핀스키 삼각형을 그리는 sier.mal 프로그램과 그 실행화면이다
 

실행화면


풍경이나 그 밖의 자연을 효과적으로 나타내기 위하여 단순히 프랙탈을 사용하는 것은 기본적인 응용일뿐이다. 우리에게 더 필요한 것은 실제로 나타내고자 하는 여러 그림들을 원하는 만큼 정확하게 표현하기 위해서 적당한 프랙탈(아핀변환들)을 찾는 수학적 능력이다. 앞에서 3개의 아핀변환을 이용하여 시어핀스키 삼각형을 그렸다.

이제 그때 사용한 3개의 아핀변환을 약간씩 변형시켜 다음과 같은 꽃나무 가지를 그려 보자. (그림 10)에는 꽃나무 가지를 이루는 세개의 프랙탈 조각도 같이 표현되어 있다(꽃가지의 밑 부분이 하나의 프랙탈 조각이다). 꽃가지만을 그리려면 gift.mal을 실행시키면 되는데, 그 그림은 친구에게 주려고 꺽은 꽃나무의 가지이다.
 

(그림10)꽃가지를 이루는 세개의 아핀변환


이 그림을 이루는 세개의 프랙탈 조각에 대응하는 세개의 아핀변환은 각각 aff(-0.47, 0.02, -0.11, 0.02, 0.4, 0.4), aff(0.39, 0.43, 0.43, -0.39, 0.26, 0.52), 그리고 aff (0.44, -0.09, -0.01, -0.32, 0.42, 0.5) 이다. 여기서 aff(a,b,c,d,e,f)를 이루는 6X3=18개의 숫자(계수)들은 주어진 그림의 '유전자 코드'와 비슷한 것이어서 그 숫자들을 조금만 바꾸어도 돌연변이에 해당하는 약간 다른 그림을 보게 된다. 실제로 꽃가지를 그리는 gift.mal 프로그램에서 사용된 18개의 숫자들을 약간씩 변형시키며 그림을 그려보면 여러 형태의 비슷한 모양의 꽃가지를 보게 된다.

이제 위의 꽃가지 그림과 관계되는 3개의 아핀변환을 반복적으로 실행시키면, 다음에서 보듯이 점점 꽃가지의 모습이 화면에 나타나게 된다.
 

(그림 12)tree12. mal 실행화면


한편 고사리 잎이나 낙엽이 떨어진 가을나무의 모습과 같이 복잡해 보이는 그림도 프랙탈 기법을 사용하여 그릴 수 있다. (그림 12)와 (그림 13)은 4개의 아핀변환을 조금씩 변화시켜 얻은 두 개의 나무 모습이다. 아핀변환의 모습을 조금씩 변화시킬 때 나무 그림이 어떻게 변화하는지 유의해 보기 바란다. 여기에 사용된 아핀변환들을 이루는 유전자 코드는 어떻게 구할 수 있을까? tree12.mal과 tree13.mal에 나와 있다.
 

(그림13)tree13. mal 실행화면


마지막으로 이 글의 시작부분에 제시된 가을철 나무와 프랙탈 조각들을 사용하여 5개의 아핀변환을 만들고, 이를 난수되먹임 알고리즘(카오스게임)으로 그린 (그림14)를 보자(tree.mal을 실행시켜 그린다). 독자들이 만일 아핀변환에서 제시한 디스켓을 만들었다면, run "fern.mal" 명령을 통해 fern.mal 프로그램을 실행시켜 고사리 잎의 그림을 그려보기 바란다. 또한 디스켓에 있는 그 외의 다른 많은 프로그램들도 실행시켜보기 바란다.
 

(그림14)tree.mal의 실행화면
 

지금까지 말 언어를 사용하여 컴퓨터에서 프랙탈 그림을 그려보았다. 프랙탈 그래픽에는 고등학교 수학 내용인 수렴과 극한, 행렬과 변환 등의 개념등이 풍부하게 들어가 있다. 따라서 미국 등에서는 고등학교에서 프랙탈이 소개되고 있다. 또한 카오스(Chaos) 이론도 2차함수, 삼각함수 등의 수학 내용과 같이 자연스럽게 수학시간에 소개되고 있다. 아무쪼록 수학을 컴퓨터와 관련시킨 이 글을 통해 수학은 공식과 계산만이 있는 끔찍한 학문이라는 시각이 조금이라도 바뀌기를 바란다.

이 기사의 내용이 궁금하신가요?

기사 전문을 보시려면500(500원)이 필요합니다.

1994년 11월 과학동아 정보

  • 조한혁 교수

🎓️ 진로 추천

  • 수학
  • 컴퓨터공학
  • 물리학
이 기사를 읽은 분이 본
다른 인기기사는?