19
- 1 - 프랙탈 도형 그리기 I. 학습 개요 자연계의 여러 현상 중에는 혼란스럽고 매우 불규칙적으로 보이는 것이 많은데, 사실은 이러한 현상을 지배하는 규칙이 숨어있다. 불규칙적인 현상에서 규칙을 찾아 내는 복잡성의 과학은 이제까지 이해하기 어려웠던 자연의 복잡성을 연구하여 그 안 에 숨은 질서를 찾아내는 학문으로, 복잡성의 과학을 대표하는 카오스에는 프랙탈 구 조로 표현될 수 있는 질서가 나타난다. 프랙탈(fractal)의 사전적 정의는 일부가 전체와 닮은 기하학적 형태를 말한다. 이 런 특징을 자기유사성(self-similarity)이라고 하며, 자기유사성을 갖는 기하학적 구조 를 프랙탈 구조라고 한다. 만델브로가 처음으로 쓴 단어로, 어원은 조각났다는 뜻의 라틴어 형용사 ‘fractus’이다. 프랙탈 구조는 자연계에서 자주 발견되는 데, 구름, 산, 번개, 난류, 해안선 및 나 뭇가지 등에서 프랙탈 구조를 쉽게 찾을 수 있다. 자연이 가지는 기본적인 구조인 프 랙탈 구조는 자연에서 뿐만 아니라 수학적 분석, 생태학적 계산, 위상공간에 나타나는 운동모형 등 곳곳에서 발견된다.

프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

  • Upload
    others

  • View
    35

  • Download
    1

Embed Size (px)

Citation preview

Page 1: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 1 -

프랙탈 도형 그리기

I. 학습 개요 자연계의 여러 현상 중에는 혼란스럽고 매우 불규칙적으로 보이는 것이 많은데, 사실은 이러한 현상을 지배하는 규칙이 숨어있다. 불규칙적인 현상에서 규칙을 찾아내는 복잡성의 과학은 이제까지 이해하기 어려웠던 자연의 복잡성을 연구하여 그 안에 숨은 질서를 찾아내는 학문으로, 복잡성의 과학을 대표하는 카오스에는 프랙탈 구조로 표현될 수 있는 질서가 나타난다. 프랙탈(fractal)의 사전적 정의는 일부가 전체와 닮은 기하학적 형태를 말한다. 이런 특징을 자기유사성(self-similarity)이라고 하며, 자기유사성을 갖는 기하학적 구조를 프랙탈 구조라고 한다. 만델브로가 처음으로 쓴 단어로, 어원은 조각났다는 뜻의 라틴어 형용사 ‘fractus’이다. 프랙탈 구조는 자연계에서 자주 발견되는 데, 구름, 산, 번개, 난류, 해안선 및 나뭇가지 등에서 프랙탈 구조를 쉽게 찾을 수 있다. 자연이 가지는 기본적인 구조인 프랙탈 구조는 자연에서 뿐만 아니라 수학적 분석, 생태학적 계산, 위상공간에 나타나는 운동모형 등 곳곳에서 발견된다.

Page 2: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 2 -

프랙탈은 수학적 도형으로도 연구되고 있다. 프랙탈 기하학은 프랙탈 도형의 성질을 연구하는 수학 분야의 하나이며, 과학, 공학, 컴퓨터, 예술에 적용되기도 한다. 또한 프랙탈 기하학은 실용적인 목적으로 많이 이용되며, 현실 세계의 매우 불규칙한 물체들을 표현하기 위한 수단이 되기도 한다. 즉, 프랙탈 기법은 과학의 여러 분야에서는 물론, 기술적으로 이미지 압축 등에서도 이용된다. 프랙탈 도형으로는 코흐 곡선, 만델브로 집합, 칸토어 곡선, 시에르핀스키 삼각형, 페아노 곡선 등이 있다. 프랙탈 도형은 컴퓨터 소프트웨어를 사용하여 반복적 방법 또는 재귀적 방법으로 쉽게 그릴 수 있다.

컴퓨터 소프트웨어인 스크래치(scratch)를 사용하여 만든 프랙탈 도형들이 많이 공개되어 있다. 스크래치 홈페이지(http://scratch.mit.edu)에서 프랙탈 도형의 이름을 검색하면 직접 실행해 볼 수 있다.

스크래치로 그린 프랙탈 도형 (http://scratch.mit.edu)

본 강의에서는 스크래치를 사용하여 여러 가지 도형을 그리는 반복적 방법과 재귀적 프로그래밍을 소개하고, 재귀적 프로그래밍으로 여러 가지 프랙탈 도형을 그려 본다. 이러한 활동을 통하여 프랙탈 도형을 이해하고, 재귀적 프로그래밍을 배운다.

Page 3: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 3 -

II. 간단한 도형 그리기

스크래치를 사용하여 간단한 도형을 그리기 위해서는 스크래치의 스프라이트(sprite)가 움

직일 때 남기는 흔적을 이용하면 된다.

활동 1. - 정다각형 그리기 -

정다각형은 변의 길이가 모두 같고 각의 크기도 모두 같은 도형이다. 이를 이용하여 간단한

정다각형을 그려보자. 먼저 스크래치를 사용하여 반복적인 방법으로 정오각형을 그린다.

정다각형에서 변의 개수가 많아지면 단순 반복으로는 쉽지 않기 때문에 ‘제어’의 ‘반복

하기’블록을 이용한다. 또한 여러 가지 정다각형을 그릴 때 반복하는 방법이 비슷하므로

‘추가블록’을 만들어 놓으면 편리하게 정다각형을 그릴 수 있다. 이때‘추가블록’에서

‘블록 만들기’를 누른 후 이름은 ‘다각형’이라 쓰고, ‘선택사항’에서 ‘숫자 매개변

수 추가하기’ 버튼을 눌러서 정다각형을 그린다.

단순 반복하기 반복하기 블록 이용 추가블록 이용

Page 4: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 4 -

위의 활동에서 정7각형을 그리면 다음과 같이 다각형이 화면을 벗어난다. 이러한 경우, 변

의 길이(이름: 변의 크기)를 조절할 수 있도록 ‘추가블록’을 다시 만들어 그린다.

활동 2. - 반복 도형 그리기 -

스크래치를 사용하여 규칙적으로 반복되는 간단한 도형을 그려보자.

스크래치에서 처음 주어진 스프라이트의 방향으로 움직인 후 90도씩 회전하는 시행을 반복

할 때, 회전할 때마다 움직인 거리, 즉, 이동거리를 다르게 줄 수 있다. 이동거리가 차례로

30, 40, 50을 반복하도록 만들어보자. 이때 ‘데이터’의 ‘변수 만들기’와 ‘리스트 만

들기’를 이용하면 편리하다.

먼저 리스트 (이름: 이동거리)를 만들고, 다음과 같이 이동거리 30, 40, 50을 추가해 보자.

이제 다음과 같이 프로그램하여 실행해 보자.

Page 5: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 5 -

‘반복블록’을 이용하여 4번 반복해 보자.

다음은 반복블록 안에서도 반복블록을 이용하여 만든 것으로, 이때 변수 n이 필요하다.

위 프로그램을 추가블록으로 만들어 두자. 이때, 반복하는 횟수를 다양하게 바꿀 수 있도록

매개변수 ‘반복횟수’를 만들자.

Page 6: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 6 -

이제, 이동거리 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도로 바꾸어 실행해 보자.

답)

Page 7: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 7 -

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를 입력한 후, 를 클릭한다.

Page 8: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 8 -

활동 4. - 무늬 그리기 -

이제 반복하기를 이용하여 그린 도형을 재귀적 프로그램으로 그려보자. 먼저 ‘데이터’의 ‘리스트 만들기’를 이용하여 ‘distances’라는 리스트를 만들고, 다음과 같이 프로그램하여 30, 40, 50을 ‘distances’에 추가하여 보자.

‘distances’의 각 값만큼 이동한 후 회전각 (이름: angle)만큼 회전하는 추가블록을 정의하자.

다음 그림과 같이 한 번 그린 후 (즉, ‘한번그리기’를 시행 한 후) 반복횟수 n을 (n-1)로 줄여 재귀적 방법으로 ‘무늬그리기’ 블록을 정의한다. 일 때의 호출이므로, ‘무늬그리기’를 호출하는 횟수는 이다. 즉, ‘한번그리기’를 번 반복하게 된다.

Page 9: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 9 -

다음은 ‘한번그리기’를 8번 반복하는 프로그램이다. 회전각은 90도이다.

회전각을 110도로, 반복횟수를 12로 바꾸어서 실행하면 다음 그림을 얻는다.

이제 반복할 때마다 이동거리를 일정한 비율로 줄이면서 그려보자. 다음은 비율을 0.9로, 회전각은 112도, 반복횟수는 40으로 그린 그림이다.

연습) 회전각, 반복횟수, 비율을 각각 바꾸면서 여러 가지 그림을 그려보자.

Page 10: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 10 -

IV. 프랙탈 도형 그리기

프랙탈 도형은 재귀적 성질을 가지고 있다. 이제 재귀적 프로그래밍을 이용하여 여러 가지 프랙탈 도형을 그려보자.

활동 5. - 코흐 곡선 -

다음은 대표적인 프랙탈 도형인 코흐 곡선이다.

스크래치를 사용하여 코흐 곡선을 그리는 재귀적 프로그래밍의 과정은 다음과 같다.

[1] 점 A에서 점 B 방향으로 크기 의 코흐 곡선을 그린 후 반시계방향으로 60도 회전한다.

[2] 점 B에서 점 C 방향으로 크기 의 코흐 곡선을 그린 후 시계방향으로 120도 회전한다.

[3] 점 C에서 점 D 방향으로 크기 의 코흐 곡선을 그린 후 반시계방향으로 60도 회전한다.

[4] 점 D에서 점 E 방향으로 크기 의 코흐 곡선을 그린다.

Page 11: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 11 -

다음은 코흐 곡선을 그리는 재귀적 프로그램이다.

연습) 다음 코흐 눈송이 곡선을 그리는 프로그램을 만들어 보자.

(답)

Page 12: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 12 -

활동 6. - 프랙탈 나무 -

프랙탈 나무는 다음과 같이 자라는 나무이다.

처음에는 1 m 자라고,

두번째는 가지 끝에서 두 가지가 직각을 이루면서 12

m씩 자라고,

세번째는 두번째 각 가지 끝에서 두 가지가 직각을 이루면서 14

m씩 자라고, ⋮

이제 스크래치를 사용하여 프랙탈 나무를 그려보자.

Page 13: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 13 -

연습) ‘프랙탈나무’ 블록의 정의에서 비율 또는 회전각을 바꾸어 다음 그림을 그려보자. (1) (2)

답) (1) (2)

Page 14: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 14 -

활동 7. - 시에르핀스키 삼각형 -

정삼각형 ABC에서 각 변의 중점을 이어서 가운데 정삼각형 DEF를 잘라낸다. 이어서 남은 정삼각형 3개에서 각각 같은 방법으로 가운데 정삼각형을 잘라낸다. 이와 같은 시행을 반복하여 얻은 도형을 시에르핀스키 삼각형이라 한다.

이제 스크래치를 사용하여 시에르핀스키 삼각형을 그려보자.

Page 15: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 15 -

연습) 다음과 같이 ’sier’ 블록에 있는 3개의 인수 을 차례로

, ,

으로 바꾸고,

3개의 이동거리 을 모두

으로 바꾸어 실행해 보자.

(답)

활동 8. - 피타고라스 나무 -

피타고라스 나무는 정사각형 위에 직각삼각형을 올려놓은 모양을 직각삼각형의 두 변에 각각 붙이는 과정을 계속 반복하여 만든 프랙탈 도형이다.

Page 16: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 16 -

이제 스크래치를 사용하여 직각삼각형의 세 변의 길이가 3, 4, 5인 피타고라스 나무를 그려보자.

연습) 한 각이 30도, 15도인 직각삼각형을 이용하여 피타고라스 나무를 그려보자.

(답) °, , 로 정하고, °, ,

로 정한다.

Page 17: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 17 -

활동 9. - 페아노 곡선 -

페아노 곡선은 이탈리아 수학자 페아노(Peano)에 의해 고안된 곡선으로, 겹치지 않으면서 평면을 채우는 곡선이다.먼저, 정사각형을 합동인 정사각형 4개로 분할한 후, 각 정사각형의 중심을 연결한다. 이어서 각 정사각형을 합동인 정사각형 4개로 분할한 후, 각 정사각형의 중심을 연결한다. 이와 같은 시행을 계속 반복하면 페아노 곡선을 얻는다.

이제 스크래치를 사용하여 페아노 곡선을 그려보자. 먼저 추가블록을 다음과 같이 만들자.

Page 18: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 18 -

이때, depth의 값에 따라 다음과 같은 결과를 얻는다.

연습) 다음은 각 정사각형을 합동인 정사각형 9개로 분할한 후, 각 정사각형의 중심을 연결하는 페아노 곡선이다. 이 곡선을 그리는 프로그램을 만들어 보자.

(답) 각 단계의 곡선이 전 단계 곡선을 9번 이어 그리도록 추가블럭을 만들고, 단계별로 그린다.

Page 19: 프랙탈 도형 그리기 - isepclub.com · 스크래치 화면에서 ‘데이터’의 ‘변수 만들기’를 눌러, ... 의 코흐 곡선을 그린 후 반시계방향으로

- 19 -