프랙탈도형그리기 I. 학습개요 자연계의여러현상중에는혼란스럽고매우불규칙적으로보이는것이많은데, 사실은이러한현상을지배하는규칙이숨어있다. 불규칙적인현상에서규칙을찾아내는복잡성의과학은이제까지이해하기어려웠던자연의복잡성을연구하여그안에숨은질서를찾아내는학문으로, 복잡성의과학을대표하는카오스에는프랙탈구조로표현될수있는질서가나타난다. 프랙탈 (fractal) 의사전적정의는일부가전체와닮은기하학적형태를말한다. 이런특징을자기유사성 (self-similarity) 이라고하며, 자기유사성을갖는기하학적구조를프랙탈구조라고한다. 만델브로가처음으로쓴단어로, 어원은조각났다는뜻의라틴어형용사 fractus 이다. 프랙탈구조는자연계에서자주발견되는데, 구름, 산, 번개, 난류, 해안선및나뭇가지등에서프랙탈구조를쉽게찾을수있다. 자연이가지는기본적인구조인프랙탈구조는자연에서뿐만아니라수학적분석, 생태학적계산, 위상공간에나타나는운동모형등곳곳에서발견된다. - 1 -
프랙탈은수학적도형으로도연구되고있다. 프랙탈기하학은프랙탈도형의성질을연구하는수학분야의하나이며, 과학, 공학, 컴퓨터, 예술에적용되기도한다. 또한프랙탈기하학은실용적인목적으로많이이용되며, 현실세계의매우불규칙한물체들을표현하기위한수단이되기도한다. 즉, 프랙탈기법은과학의여러분야에서는물론, 기술적으로이미지압축등에서도이용된다. 프랙탈도형으로는코흐곡선, 만델브로집합, 칸토어곡선, 시에르핀스키삼각형, 페아노곡선등이있다. 프랙탈도형은컴퓨터소프트웨어를사용하여반복적방법또는재귀적방법으로쉽게그릴수있다. 컴퓨터소프트웨어인스크래치 (scratch) 를사용하여만든프랙탈도형들이많이 공개되어있다. 스크래치홈페이지 (http://scratch.mit.edu) 에서프랙탈도형의이름 을검색하면직접실행해볼수있다. 스크래치로그린프랙탈도형 (http://scratch.mit.edu) 본강의에서는스크래치를사용하여여러가지도형을그리는반복적방법과재귀적프로그 래밍을소개하고, 재귀적프로그래밍으로여러가지프랙탈도형을그려본다. 이러한활동을 통하여프랙탈도형을이해하고, 재귀적프로그래밍을배운다. - 2 -
II. 간단한도형그리기 스크래치를사용하여간단한도형을그리기위해서는스크래치의스프라이트 (sprite) 가움 직일때남기는흔적을이용하면된다. 활동 1. - 정다각형그리기 - 정다각형은변의길이가모두같고각의크기도모두같은도형이다. 이를이용하여간단한정다각형을그려보자. 먼저스크래치를사용하여반복적인방법으로정오각형을그린다. 정다각형에서변의개수가많아지면단순반복으로는쉽지않기때문에 제어 의 반복하기 블록을이용한다. 또한여러가지정다각형을그릴때반복하는방법이비슷하므로 추가블록 을만들어놓으면편리하게정다각형을그릴수있다. 이때 추가블록 에서 블록만들기 를누른후이름은 다각형 이라쓰고, 선택사항 에서 숫자매개변수추가하기 버튼을눌러서정다각형을그린다. 단순반복하기반복하기블록이용추가블록이용 - 3 -
위의활동에서정 7 각형을그리면다음과같이다각형이화면을벗어난다. 이러한경우, 변 의길이 ( 이름 : 변의크기 ) 를조절할수있도록 추가블록 을다시만들어그린다. 활동 2. - 반복도형그리기 - 스크래치를사용하여규칙적으로반복되는간단한도형을그려보자. 스크래치에서처음주어진스프라이트의방향으로움직인후 90도씩회전하는시행을반복할때, 회전할때마다움직인거리, 즉, 이동거리를다르게줄수있다. 이동거리가차례로 30, 40, 50을반복하도록만들어보자. 이때 데이터 의 변수만들기 와 리스트만들기 를이용하면편리하다. 먼저리스트 ( 이름 : 이동거리 ) 를만들고, 다음과같이이동거리 30, 40, 50을추가해보자. 이제다음과같이프로그램하여실행해보자. - 4 -
반복블록 을이용하여 4 번반복해보자. 다음은반복블록안에서도반복블록을이용하여만든것으로, 이때변수 n 이필요하다. 위프로그램을추가블록으로만들어두자. 이때, 반복하는횟수를다양하게바꿀수있도록 매개변수 반복횟수 를만들자. - 5 -
이제, 이동거리 30, 40, 50, 70, 40 을실행해보자. 실행하기전에리스트에아무것도남 아있지않도록 수 가 4 인창살무늬를그린것이다. 를여러번누르자. 다음은 반복횟 연습 ) (1) 이동거리 는 30, 10, 20, 40, 70 으로, 반복횟수 는 3 으로실행해보자. 또 반복횟수 를 4, 또는 5로도실행해보자. (2) 이동거리 는 10, 20, 30, 30으로, 반복횟수 는 10으로실행해보자. 답 ) (1) (2) 연습 ) 회전각을 45 도로하고, 이동거리 는 10, 20, 30, 30, 10 으로실행해보자. 답 ) 또, 회전각을 75 도로바꾸어실행해보자. - 6 -
III. 재귀적프로그래밍 재귀적성질을가진프랙탈도형은재귀적방법으로쉽게그릴수있는데, 재귀적방법의 아이디어는수학적귀납법의원리와같이, (n-1) 번째결과로부터 n 번째결과를얻는것이다. 활동 3. - 의값구하기 - 등과같이자연수 에대하여 부터 1까지의자연수를차례로모두곱하는것은 (n의계승, factorial) 이라한다. 이때, 로정의한다. 이므로 n! 은 (n-1)! 과 n을곱하여얻는다. 또 은 과 ( ) 을곱하여얻는다. 이러한과정을 까지반복하면, 결과적으로 의값을얻게된다. 재귀적방법의이해를위하여 n! 의값을구하는재귀적프로그래밍을해보자. 스크래치화면에서 데이터 의 변수만들기 를눌러, 의값을저장할변수 res 를만들자. 재귀적프로그래밍을위해서는, 추가블록 을만들어야하므로, 추가블록 을선택한후 블록만들기 를누르고 fact 라고입력하자. 또 선택사항 을누르고 숫자매개변수추가하기 버튼을눌러이름을 n 으로바꾸자. 이제 제어 의 만약 블록을그림과같이 fact 정의에추가하고, 연산 의를만약의오른쪽에넣고, 을왼쪽에입력하고 0을오른쪽에입력한다. n이 0일때에는결과값이 1이므로, res 에 1을저장한다. n이 0이아니면 (n-1)! 을계산하고 ( 이때, 계산결과는 res 에저장된다.) n과 res 를곱하여다시 res 에저장한다. fact 블록을추가하고 5 를입력한후, 를클릭한다. - 7 -
활동 4. - 무늬그리기 - 이제반복하기를이용하여그린도형을재귀적프로그램으로그려보자. 먼저 데이터 의 리스트만들기 를이용하여 distances 라는리스트를만들고, 다음과같이 프로그램하여 30, 40, 50 을 distances 에추가하여보자. distances 의각값만큼이동한후회전각 ( 이름 : angle) 만큼회전하는추가블록을정의하자. 다음그림과같이한번그린후 ( 즉, 한번그리기 를시행한후 ) 반복횟수 n 을 (n-1) 로줄여 재귀적방법으로 무늬그리기 블록을정의한다. 일때의호출이므로, 무늬그리기 를호 출하는횟수는 이다. 즉, 한번그리기 를 번반복하게된다. - 8 -
다음은 한번그리기 를 8 번반복하는프로그램이다. 회전각은 90 도이다. 회전각을 110 도로, 반복횟수를 12 로바꾸어서실행하면다음그림을얻는다. 이제반복할때마다이동거리를일정한비율로줄이면서그려보자. 다음은비율을 0.9 로, 회전각은 112 도, 반복횟수는 40 으로그린그림이다. 연습 ) 회전각, 반복횟수, 비율을각각바꾸면서여러가지그림을그려보자. - 9 -
IV. 프랙탈도형그리기 프랙탈도형은재귀적성질을가지고있다. 이제재귀적프로그래밍을이용하여여러가지프랙탈도형을그려보자. 활동 5. - 코흐곡선 - 다음은대표적인프랙탈도형인코흐곡선이다. 스크래치를사용하여코흐곡선을그리는재귀적프로그래밍의과정은다음과같다. [1] 점 A 에서점 B 방향으로크기 의코흐곡선을그린후반시계방향으로 60 도회전한다. [2] 점 B 에서점 C 방향으로크기 의코흐곡선을그린후시계방향으로 120 도회전한다. [3] 점 C 에서점 D 방향으로크기 의코흐곡선을그린후반시계방향으로 60 도회전한다. [4] 점 D 에서점 E 방향으로크기 의코흐곡선을그린다. - 10 -
다음은코흐곡선을그리는재귀적프로그램이다. 연습 ) 다음코흐눈송이곡선을그리는프로그램을만들어보자. ( 답 ) - 11 -
활동 6. - 프랙탈나무 - 처음에는 1 m 자라고, 두번째는가지끝에서두가지가직각을이루면서 m 씩자라고, 세번째는두번째각가지끝에서두가지가직각을이루면서 m 씩자라고, 이제스크래치를사용하여프랙탈나무를그려보자. - 12 -
연습 ) 프랙탈나무 블록의정의에서비율또는회전각을바꾸어다음그림을그려보자. (1) (2) 답 ) (1) (2) - 13 -
활동 7. - 시에르핀스키삼각형 - 정삼각형 ABC 에서각변의중점을이어서가운데정삼각형 DEF 를잘라낸다. 이어서남은 정삼각형 3 개에서각각같은방법으로가운데정삼각형을잘라낸다. 이와같은시행을 반복하여얻은도형을시에르핀스키삼각형이라한다. 이제스크래치를사용하여시에르핀스키삼각형을그려보자. - 14 -
연습 ) 다음과같이 sier 블록에있는 3개의인수 을차례로,, 으로바꾸고, 3 개의이동거리 을모두 으로바꾸어실행해보자. ( 답 ) 활동 8. - 피타고라스나무 - 피타고라스나무는정사각형위에직각삼각형을올려놓은모양을직각삼각형의두변에각각 붙이는과정을계속반복하여만든프랙탈도형이다. - 15 -
이제스크래치를사용하여직각삼각형의세변의길이가 3, 4, 5 인피타고라스나무를그려보자. 연습 ) 한각이 30 도, 15 도인직각삼각형을이용하여피타고라스나무를그려보자. ( 답 ),, 로정하고,,, 로정한다. - 16 -
활동 9. - 페아노곡선 - 페아노곡선은이탈리아수학자페아노 (Peano) 에의해고안된곡선으로, 겹치지않으면서평면을채우는곡선이다. 먼저, 정사각형을합동인정사각형 4개로분할한후, 각정사각형의중심을연결한다. 이어서각정사각형을합동인정사각형 4개로분할한후, 각정사각형의중심을연결한다. 이와같은시행을계속반복하면페아노곡선을얻는다. 이제스크래치를사용하여페아노곡선을그려보자. 먼저추가블록을다음과같이만들자. - 17 -
이때, depth 의값에따라다음과같은결과를얻는다. 연습 ) 다음은각정사각형을합동인정사각형 9 개로분할한후, 각정사각형의중심을연결 하는페아노곡선이다. 이곡선을그리는프로그램을만들어보자. ( 답 ) 각단계의곡선이전단계곡선을 9 번이어그리도록추가블럭을만들고, 단계별로그린다. - 18 -
- 19 -