중등 (자유학기) 코딩나라

코딩수학.com 주소에 학생들이 친숙한 블록코딩도 될 수 있도록 터틀크래프트를 업그레이드 했습니다 !!

 

                 클릭하세요 :  SNU 코딩수학 (블록코딩)

          SNU 코딩수학 밴드 : https://band.us/@snucode

 

컴퓨팅 사고력 : 초중등 창의코딩과 자유학기 코딩나라

 

코딩교육의 목표는 컴퓨팅 사고력 (computational thinking) 역량을 키우는 것입니다. 컴퓨팅 사고력은 한마디로 컴퓨터(기계)와 함께 문제를 해결하는 역량입니다. 컴퓨팅 사고력 용어는 MIT 인공지능 및 수학교수 연구자인 패펄트 (Papert) 교수가 제안하였고, 패펄트는 컴퓨팅 사고력 역량을 위해 거북명령 로고 LOGO 언어를 만들고, 또한 로고 거북명령에  기반한 거북수학을 만들었습니다 (스크래치 언어의 아버지는 패펄트 교수 : MIT 스크래치는 거북명령 LOGO의 마우스 버젼). 컴퓨팅 사고력의 핵심적인 요소는 추상화와 자동화입니다. 자동화 관련 내용은 아래의 알고리즘과 순서도에 나오는 터틀크래프트 코딩에서 맛볼 수 있습니다. 추상화 내용은 맨 아래의 속이 비어있는 토러스에서 맛볼 수 있습니다. 중2의 피타고라스 정리를 활용한 간단한 수학식 (이것이 추상화의 핵심) 이 만들어내는 거대한 세계를 체험하세요.  

수학자였던 패펄트 교수는 수학과 코딩을 융합하는 컴퓨팅 사고력을 위해 MIT 거북수학을 만들었는데, 거북수학은 미국 초등생에게 가자-돌자 거북코딩으로 Learning by Design (Making) 하는 코딩수학입니다.  서울대 초등 창의코딩 교육은, 학생들이 경험한 스크래치 또는 엔트리 언어의 경험을 바탕으로, 거북명령과 집합 명령으로 거북성과 건축물을 디자인하여 만들고, VR 등으로 놀고, 그리고 3D 프린터로 뽑고 나누는 교육방법으로 운영합니다.

그렇다면, 창의융합으로 미래를 대비하는 중학교 이상의 (특히 자유학년제) 코딩수학의 특징은 무엇일까요 ? 서울대 중등 자유학년제 창의코딩은, 먼저 컴퓨팅 사고력을 위한 거북수학을 익힌 후, 예전에 중학교 1학년 수학 내용이었던 집합과 논리 (조건제시법, 원소나열법 : 추상화 역량) 그리고 예전에 고등학교 수학교과서 내용이었던 아래와 같은 알고리즘과 순서도 (순차, 선택, 반복 : 자동화 역량) 내용을 되살려 코딩과 수학이 융합된 코딩수학으로 접근합니다.

특별히, 정직구원과 같은 LEGO 블럭에 해당하는 집합 명령과 고등학교 수학이었던 알고리즘과 순서도 그리고 스크래치 언어의 repeat 반복 명령을 터틀크래프트에서 알고리즘 관점에서 융합합니다. 알고리즘의 핵심적인 구조는 순차구조, 선택구조, 그리고 반복구조이며 알고리즘을 아래와 같은 순서도 모양으로 도입하면 좋습니다.

 

알고리즘과 순서도 ( 순차 + 선택 + 반복 )  기반 창의코딩  

추상적인 수학적 표현을 사용하여 자동화 프로그래밍 역량을 키운다 !! 

인간은 자기에게 의미있는 무언가를 만드는 것을 좋아하기에, 학생들이 코딩으로 의미있는 것들을 창의적으로 만들며 코딩학습도 할 수 있는 코딩교육이 요구됩니다. 터틀크래프트 코딩환경애서는 알고리즘 3대 구조를 기반으로 창의코딩을 할 수 있습니다. 알고리즘 3대 구조의 첫번째는 순차구조인데, 이는 코딩 명령어가 하나하나 순서대로 실행되는 구조입니다.

다음에서, 터틀크래프트의 간단한 집합 명령들이 순차적으로 실행되며 로마 시대의 고대 건축물은 만드는 창의코딩의 예를 보세요. 쓰여진 집합 코딩명령의 순서가 바뀌면 결과도 바뀔 수 있습니다. 특히 빈 공간을 만드는 집합 코딩명령은 순서를 바꾸면 안됩니다. 아래 그림 밑에 있는 명령 편집기에 가서 명령을 실행시켜 봅니다.

아래의 [beginxyz] 를 누르면, 로마에 있는 판테온 신전의 모습이 나타납니다. 판테온 신전은 안이 비어있는 구의 모양이며, 그 안의 천장에는 구멍이 있는데, 이 구멍으로 연기가 빠져나가도록 천장에 구멍을 만들었다고 합니다.

먼저 아래의 [beginxyz] 단추를 누르세요. 이 때, 3차원 마인크래프트와 같은 환경이 나타나며, 동시에 판테온이 만들어집니다. 마우스로 움직이며, 마인 크래프트와 같이 키보드로 터틀크래프트의 터북이 (마인크래프트의 스티브와 같은 존재)를 움직일 수 있습니다.

beginxyz ; // beginxyz 뒤에 ; 하면 좌표축 if(z<0 || z>30) return // 속도 개선 집합 { 원(0,0,11,3) ; 0 } // 각 층에서 중심 (0,0) 이고 반지름 3인 원 // ; 다음의 0 으로 판테온 천장의 구멍 만듦 집합 { 구(0,0,10,19) && z>0 ; 0 } // 중심이 (0,0,10) 이고 반지름이 19인 구 // z>0 은 1층 이상에만 만들라는 것 집합 { 구(0,0,10,20) && z>0 ; 9 } // ; 다음의 9 는 9번 블럭으로 만들라는 것

명령 설명:

beginxyz ==> 터틀크래프트에게 (x,y,z) 좌표를 쓸 수 있는 3차원 공간을 만들되, x와 y 좌표축까지 표시하도록 하는 명령입니다.

집합 { 원(0,0,11,3) ; 0 }   ==> 원의 중심이 (0,0,11) 이고 반지름이 3인 원을 만들되, 블럭의 모양을 0번으로 ( 0번은 투명하게 하는 것)

집합 { 구(0,0,10,19) && z>0 ; 0 } ==> 구의 중심 좌표가 (0,0,10) 이고 구의 반지름이 19인 구를 만들되, z 좌표가 0 보다 크도록 (즉 지상에 만들라는 조건) 하고 블럭의 모양을 0번으로 (빈 공간 !!)

집합 { 구(0,0,10,20) && z>0 ; 9 } ==> 구의 중심의 좌표가 (0,0,10) 이고 구의 반지름이 20인 구를 만들되, z 좌표가 0 보다 크도록 (즉 지상에) 하고 암석 모양을 그려주는 9번 블럭으로 만든다.

편집기의 // 표시는 설명을 쓴 것으로, 이 것은 실행되지 않습니다. 

===========================================

이 때, 집합 명령문의 순서를 바꾸면 문제가 생깁니다. 순차구조에 의해 먼저 구의 중심을 0 블럭 (비워진 블럭) 으로 만들었기 때문입니다. 여기서 사용된 집합 명령어는 주어진 조건에 맞는 모든 좌표에 블럭을 만들게 하는 조건제시법 명령입니다 (원소나열법 명령으로는 주어진 좌표에 블럭을 하나 만드는 cube(a,b,c) 등이 있습니다). LEGO 장난감의 주어진 블럭을 결합시켜 멋진 것을 만든 경험이 있을 것입니다. MIT 거북명령 LOGO 언어는 실제로 LEGO 회사의 연구비 지원을 받았으며, 자와 컴퍼스로 도형을 작도하는 수학의 정신과 기본 블럭을 결합시켜 멋진 것을 만드는 레고 장난감의 정신을 합쳐서 구성주의 (constructionism) 기반 코딩수학을 만들었습니다. 터틀크래프트의 집합 명령은 LEGO 블럭에 해당하는 것으로, 집합 명령어를 결합시켜 멋진 것을 코딩하고, 3D VR로 체험하고,  3D 프린터로 뽑아냅니다 !!

순차구조에 이어, 이제 알고리즘의 선택구조를 다룹니다. 아래의 명령 편집기를 보면 그 안에 if 명령이 쓰여 있는 것을 봅니다. 알고리즘의 선택구조에는 if 조건문 명령이 쓰이는데, if 조건문 명령은 주어진 조건이 성립하는 경우와 그렇지 않은 경우에 각각 선택적으로 실행을 다르게 합니다. 아래의 if 기반 코드는 바로 위의 원과 구에 대한 수학적 명령 (중심의 좌표와 반지름에 의한 명령)  코드를 프로그래밍 언어의 선택구조에 맞게 고친 것입니다. 한마디로, 위에 적힌 수학적 집합 명령어는 그 자체가 if 조건문으로 이루어진 선택구조 알고리즘이며, 주어진 조건을 만족하는 모든 좌표를 구하는 (해집합) 조건제시법 명령입니다 (조건이 맞지 않으면 실행없이 그냥 다음 명령으로 내려간다). 아래는 위에서 만든 판테온 신전의 모양을 만드는 프로그래밍 언어 스타일 코드로 if 조건문 코드와 조건식을 사용한 것입니다.

여러분은 위와 아래의 코드를 비교했을 때, 어떤 것이 저학년 학생도 접근할 수 있는 코드라고 생각하나요 ? 코딩수학은 프로그래밍 언어 대신에 수학적 표현으로 코딩과 수학을 창의적으로 융합하는 것입니다.  아래 [beginxyz] 단추를 눌러 판테온 신전 모양을 만드세요. 

beginxyz ; // beginxyz 뒤에 ; 하면 좌표축 집합 { x*x+y*y<= 3*13 && z>= 29 ; 0 } //if( x*x+y*y<=13*13 && z>= 29) return 0 // 원의 방정식으로 천장의 구멍을 만듦 if( sqrt(x, y, z-10) <= 19 && z > 0 ) return 0 // sqrt 함수와 논리 and 를 나타내는 && if( x*x+y*y+(z-10)*(z-10) <= 20*20 && z > 0 ) return 9 // 고등학교 수학인 구의 방정식을 사용함

위의 코드에는 중학교 수학의 피타고라스 정리가 사용되었습니다. sqrt ( x, y ) =  (x*x+y*y 의 제곱근) 표현은 x의 제곱과 y 제곱의 합의 제곱근을 나차냅니다. 따라서 sqrt(x,y) 는 피타고라스 정리에 의해 원점 (0,0) 에서 좌표 (x,y) 까지의 거리가 됩니다. sqrt ( x, y, z-10 ) =  (x*x+y*y+(z-10)*(z-10) 의 제곱근) 표현은 좌표 (0,0,10) 에서 3차원의 좌표 (x,y,z) 까지의 거리가 됩니다. 여기서 중요한 것이 sqrt( x, y ) < 10 이 만드는 원의 영역과 sqrt( x-10, y) < 10 이 만드는 영역의 차이를 이해하는 것입니다. sqrt( x, y ) < 10 은 원점을 중심으로 반지름이 10 미만인 원의 영역을 그리며,  sqrt( x-10, y) < 10  은 (10, 0) 을 중심으로 반지름이 10 미만인 원을 그립니다. 따라서 sqrt( x, y ) < 10 으로 만들 원의 영역이 오른쪽으로 10 만큼 이동을 하게 됩니다. 이러한 수학적 표현과 원리를 3차원 세계에서 만들며 학습 ( Learning by Making ) 하도록 만든 것이 패펄트의 수학나라 (MathLAND ) 입니다. 저 아래에 나오는 패펄트의 동영상에 수학나라에 대한 이야기가 있습니다. 또한 맨 끝에 설명되어 있는 z = f(x,y) = sqrt(x,y) 함수의 그래프를 그리는 방법을 익히세요. 맨 아래의 하얀 원뿔은 집합 { 원(0,0,0, 50-z) } 로 만들 수 있지만, 속이 비어있는 원뿔은 z=sqrt(x,y) 함수의 그래프로 그릴 수 있습니다.

원이나 구는 중심의 좌표에서 주어진 반지름의 거리 안에 들어오는 블럭을 모아서 만들어집니다. z > 0 조건은 1층 이상이라는 뜻으로, 땅 아래의 지하세계에는 만들 필요가 없기에 쓴 것입니다. 판테온 천장의 구멍을 위해서는 z>=29 즉 29층 이상에만 구멍을 내라는 명령을 하였습니다. 고등학교 집합과 명제 단원의 and 와 or 논리는 중요합니다. 프로그래밍 언어에서는 and 는 && 기호로 그리고 or 는 || 기호로 나타냅니다. 바로 앞의 판테온 코드와 어떤 차이가 있습니까? 앞에서는 초등학생도 접근할 수 있도록 정직구원과 같은 LEGO 블럭과 같은 집합 명령을 사용하였고, 지금 코드는 고등학교 수학에 나오는 원과 구의 방정식을 사용하였습니다.

이제 마지막으로, 알고리즘의 반복구조를 알아봅니다. MIT 거북명령 LOGO 와 스크래치에는 repeat 반복명령이 있습니다. 다른 프로그래밍 언어에는 for 반복조건 명령이 많이 쓰입니다. 터틀크래프트는 두 종류의 반복명령을 모두 사용할 수 있습니다. 간단한 repeat 반복 명령은 이미 MIT 거북수학에서 설명하였으니, 좀더 복잡한 repeat 반복 명령을 for 반복조건 명령문과 같이 도입하여 설명을 합니다.

우선 [beginxyz] 단추를 눌러 3차원 마인크래프트와 같은 환경을 만들고, 이어서 [실행] 단추로 거북명령 doit 원소나열법 명령을 실행시킵니다.

// beginxyz 없는 코드 : [실행] 단추로 실행 A = ' s[u] s[uu] ' // 대문자 A는 치환문자 n = 1 // n은 숫자가 저장되는 변수문자 while( n < 20 ) { // n 값이 20 미만이면 반복 doit( (n)A ; n ) // A를 n번 반복한다, n번 블럭으로 doit( L ) // Left 90도 회전한다 n = n+1 // n 값을 1 만큼 증가시킴 }

위의 코드에는 beginxyz 라고 쓰여진 곳이 없습니다. beginxyz 아래에 쓰는 조건제시법 명령이 없기에 생략한 것입니다. 위의 코드에서 중요한 것은, 문자 A와 변수 n의 사용입니다. n 이 증가하면서 치환문자 A를 n번 부르는 (n)A 코드에 의해 성벽의 길이가 점점 늘어납니다. 또한 n번 타입의 블록으로 성벽의 색이 계속 바뀝니다. 문자와 변수 그리고 방정식과 부등식은 중학교 (자유학년제) 코딩수학의 핵심적 내용입니다. 참고로, 일반적인 프로그래밍 언어에서의 for 반복문은 초보자가 배우기에 어렵습니다. 그래서 거북(고양이) 명령에서도 반복 repeat 명령을 씁니다. 학생들은 앞으로 파이썬 언어와 같은 고급 언어를 사용하는 시대가 오기에, 어렵지만 for 반복문을 익히는 것이 좋습니다. 적어도 while 명령은 익혀야 합니다. 아래의 for 명령에서, cube(i,0,1) 명령은 좌표 (i,0,1) 위치에 정육면체 cube 블럭을 만들라는 명령입니다.

 

 

집합과 논리 : 조건제시법 및 원소나열법이 융합된 코딩수학

앞에서 다룬 알고리즘과 순서도의 내용이 중학교 (자유학년제) 코딩수학 내용으로 중요하지만, 더 중요한 것이 문자와 변수 그리고 방정식과 함수 등의 수학적 개념과 논리입니다. 특별히 코딩 경험이 없는 학생들에게 순차와 선택 그리고 반복구조의 알고리즘 기반의 프로그래밍 접근은 재미도 없고 또한 어렵게 느껴질 수도 있습니다. 이에 터틀크래프트 기반 코딩수학에서는 기존의 코딩교육에서 다루는 내용과 순서를 바꾸어, 우선 집합과 논리적 조작을 융합시킨 정직구원 (LEGO 블럭과 같은 명령 조각) 으로 시작합니다. 이런 접근은 초등 6학년 수학에서 다룬 기둥과 뿔을 중학교 1학년 입체도형과 함수와 부등식 등과 연결시키고, 중학교 2학년의 연립방정식과 피타고라스 정리 등을 조건제시법으로 자연스럽게 도입할 수 있기에 좋습니다. 다음의 코드는 콘진원 게임코딩 교재에도 나오는 피라미드와 나무를 초등 및 중학교 1학년 수학인 각뿔과 원뿔을 집합 명령으로 만드는 것입니다. 먼저 [begin] 단추를 누르면 피라미드와 나무가 나타납니다. 이어서 [실행] 단추를 누르면 앵그리버드 깃발이 만들어집니다. 앵그리버드 깃발은 조건제시법 대신에 beginxyz 위에 가자-돌자 거북명령으로 블럭을 하나씩 만드는 원소나열법으로 만든 것으로, 경우에 따라 거북명령이 더 창의적인 쉬운 방법입니다.

doit( LLsuuuu [ss]u[ss] ; 18 ) // doit 거북 원소나열법 (실행 단추로) beginxyz ; // 조건제시법 (시작 단추로) if(z<0 || z>15) return 0 // 속도 개선 집합 { 정( 5, 5, 1, 5-z ) ; 16 } // 1층 이상이며, 16번 고대 벽돌로 // 각 층에 중심(5,5), 반지름 5-z 집합 { 원( -5, 5, 1, 1 ) && z < 8 ; 12 } // 1층 이상이면서 && 8층 미만의 층까지 집합 { 원( -5, 5, 8, 13-z ) ; 13 }

집합 {  정( 5, 5, 1, 5-z ) ; 16 } 또는 집합 {  직( 5, 5, 1, 5-z, 5-z ) ; 16 } 명령 (터북크래프트 2022 버젼에서는 집합 {  직( 5, 5, 1, 5-z ) ; 16 } 명령)은 맨 아래의 중심점 좌표가 (5,5,1) 이며, 여기서 부터 시작해서 각각의 z 층에서 중심이 (5,5) 이고 반지름 (가로와 세로쪽 반지름)이 5-z 인 사각형을 만들라는 것입니다 (터북크래프트 2022 버젼 부터는 직 명령을 사용합니다). 이 명령은 각각의 z 층에 반지름이 5-z 이기에, 중학교 수학의 일차함수 대응표를 생각하면 점점 올라가면서 반지름이 작아지고, 6층 이상에서는 반지름이 음수가 되기에 그 이상의 층에서는 만들지 않습니다 (음수인 반지름은 없기에). 마찬가지 이유로, 집합 {  원( -5, 5, 1, 1 ) && z < 8 ; 12 } 은 맨 아래의 (-5,5,1) 부터 올라가면서 8층 미만까지 자작나무 줄기로 나무의 기둥을 만듭니다. 그 다음의 집합 {  원( -5, 5, 8, 13-z ) ; 13 } 명령은 맨 아래의 (-5,5,8) 에서 시작해서 올라가며 중심은 (-5,5) 이며 반지름이 13-z 라는 것을 통해 원뿔 모양을 만듭니다 (14층 이상에서는 음수인 반지름이 나옴). 이러한 표현은 컴퓨팅 사고력의 추상화 (Abstraction) 에 부합하는 수학적 코딩입니다.

beginxyz 다음에 제일 먼저 나오는 if(z<0 || z>10) return 0 명령은 알고리즘 순차구조에 따라 제일 먼저 빈 공간의 좌표를 알려줍니다 (해집합에 속하지 않는 좌표).  지하층과 높은 곳에는 아무 것도 만들어지기 않기에, 이렇게 코딩 명령을 쓰는 것은 컴퓨팅 사고력의 자동화  (Automaiton) 요소인 효율성 있게 빨리 실행되는 알고리즘 표현입니다.  컴퓨팅 사고력 역량을 위해, 먼저 정직구원 LEGO 블럭 코딩으로 조건제시법에 쉽게 접근시키고, 그 후에 피타고라스 정리와 도형의 방정식 등의 심화과정에 들어갈 수 있습니다. 아래 코드는 피타고라스 정리와 원의 방정식으로 속이 빈 토러스 모양을 만듭니다. [beginxyz] 단추로 실행을 시키면 나타나는 왼쪽의 화면을 클릭하고 들어가서, s 키를 누르면 터북이가 뒤로 가면서 속이 비어있는 토러스 모양이 보입니다. z 와 c로 높이를 조절하고, 마인크래프트에서와 같이 w, a, d 키와 마우스로 이동을 하며, 토러스 내부의 빈 공간에 가서 Shift 키로 중력을 작동시켜 착륙한 후 놀아보세요.

// z 키로 올라가고, s 키로 뒤로 가서 보세요 ! beginxyz // 좌표식과 조건제시법 if( abs(z) > 10 ) return // 속도 개선 R=30 ; r=10 // 토러스의 반지름 들 D = sqrt ( x , y ) // x*x+y*y 의 제곱근 // 원점에서 R 만큼 떨어진 위치에, 반지름 r인 // 원을 만들어 나가면서 토러스 모양을 만듦 집합 { abs( (D-R)*(D-R)+z*z , r*r ) < 20 && y > -22 } return 0 // 나머지는 모두 0 (땅이 안생긴다)

위의 코드에서 abs( z ) 는 z의 절대값 |z| 을 나타내며, A와 B의 차이의 절대값은 abs( A , B ) = | A - B | 표현으로 타나냅니다. 또한 D = sqrt ( x, y ) =  (x*x+y*y 의 제곱근) 표현은 x의 제곱과 y 제곱의 합의 제곱근을 변수 D에 저장하라는 것입니다. 따라서 sqrt(x,y) 는 피타고라스 정리에 의해 원점에서 좌표 (x,y) 까지의 거리가 됩니다. 위의 명령이 토러스를 만드는 이유를 다름 그림을 기반으로 수학적으로 탐구하자.

 

이렇게 수학적 코딩을 의도적으로 사용하는 이유는, 저학년부터 이러한 수학적 코딩표현에 익숙할 수 있도록 훈련을 시키려는 것입니다. 거북명령 LOGO 와 스크래치 프로그래밍 언어의 아버지인 MIT 대학 수학자였던 패펄트 (Papert) 교수는 모국어를 배우듯이 학생들이 수학언어를 익힐 수 있도록 수학나라 (MathLAND) 를 만들어야 된다고 주장하였습니다. 터틀크래프트는 학생들이 수학언어에 익숙해지도록 수학적 코딩언어로 재미있는 건축물 등을 만들 수 있도록 디자인된 수학나라 MathLAND 이며 또한 코딩나라입니다 (영어를 잘 이해하지 못하면 한글 자막을 켜고 들어보세요).

 

저 위의 코드 맨 마지막에 쓰여있는 return 0 표현은 조건에 맞는 곳의 여집합은 모두 빈 공간으로 만들라는 것입니다. 그래서 땅바닥도 생기지 않습니다 (저 아래의 하얀 부분은 만듭니다. 이 것이 없으면 터북이가 그 아래의 지옥으로 빠짐). 아래 화면은 [beginxyz] 실행 후, 터북이를 z키로 위로 올리고, s키로 뒤로 이동시킨 후의 모습입니다 (마인크래프트의 스티브와 같이 터북이는 터틀크래프트의 주인공).

이 입체는 속인 빈 토러스를 y>-22 부분만 잘라서 그린 것으로, 위의 코드에서 D = sqrt( x, y ) = sqrt ( x*x+y*y ) 는 중학교 2학년에 나오는 피타고라스 정리에 의한 거리이며, 그 아래의 고등학교 집합 명령은 주어진 조건에 맞는 해집합을 구하는 조건제시법의 예입니다 (2010년대 초반에도 집합 내용은 중학교 1학년에 소인수분해와 같이 도입되어 있습니다). 이러한 집합과 and or 논리 그리고 3차원 좌표 등으로 수학과 코딩을 융합시키고, 또한 컴퓨팅 사고력 역량을 위해 3차원 마이크래프트와 같은 게임 환경으로 도입하여 초등 및 중학교 자유학년제 코딩수학 등에도 도입할 수 있습니다. 이러한 코딩수학은 패펄트 교수의 컴퓨팅 사고력 역량과 구성주의 철학에 기반한 MIT 거북수학의 연장이며, 또한 고등수학에 나오는 집합과 논리,  3차원 도형의 방정식, 부등식의 영역 등과 연결되어 있습니다 !

 

이제 고등학교에 새로 도입되는 인공지능과 수학 교과의 핵심 내용인 부등식 영역에서의 최대 최소 문제와 관련하여, z = sqrt(x,y) 함수의 그래프를 그리고 그 안의 수학을 살펴봅니다. 

// z 키로 올라가고, s 키로 뒤로 가서 보세요 ! beginxyz ; 집합 { abs( z , sqrt(x,y) ) < 1 } // -1 < z - sqrt(x*x+y*y) < -1 부등식 해집합 // sqrt(x*x+y*y) 는 x*x+y*y 의 제곱근이다. // 땅에 그린 반지름 10인 원을 10층에 올림. 집합 { abs( z , 50 - sqrt(x,y) ) < 1 ; 6 } // 땅에 그린 반지름 10인 원을 40층에 올림 // 땅에 그린 반지름 20인 원을 30층에 올림

위의 코드가 그린 깔대기 모양의 빨간 벽돌은 z = f(x,y) = sqrt(x,y) 라는 함수의 그래프입니다. 중학교 수학에서 y=x , y=x-3 , y=x+3  일차함수의 그래프를 그릴 때, 아래와 같이 x 와 y 의 대응표를 만든 후, 좌표 ( x, y )  에 점을 찍어 그래프를 완성하게 됩니다.

마찬가지로, z = sqrt(x,y) 의 그래프에서는, 예를 들어, x=3 이고 y=4 이면 sqrt(3,4) = 5 이기에 z는 5가 되고, 따라서 좌표 (3, 4, 5) 위치에 점을 찍게 됩니다. 그런데 sqrt(x,y)=5 가 되는 (x,y) 들의 모임은 원점을 중심으로 반지름이 5인 원입니다. 따라서 이 원에 있는는 각각의 (x,y) 에 대해서 (x,y,5) 에 그래프의 점이 찍어지게 됩니다. 즉 원점을 중심으로 반지름이 10 인 원의 (x,y) 에 대해 (x,y,10) 에 점을 찍으면 z = sqrt(x,y) 그래프가 그려지게 됩니다. 그래서 위와 같이 깔대기 모양의 빨간 3차원 그래프가 그려집니다. 

그렇다면 z=50-sqrt(x,y) 그래프는 어떻게 될까요. 이 경우에는, 원점을 중심으로 반지름이 50인 원 위의 (x,y) 에 대해 (x,y,0) 에 점들이 찍힙니다 (이 경우 6번 블럭인 하얀점). 그리고 원점 (0,0) 에 대응하여 (0,0,50) 위치에 점이 찍힙니다. 결국 위의 그림에서 하얀 원뿔 모양의 그래프가 그려집니다. 이 경우 지하의 세계에도 그래프가 그려집니다. 그 이유는 원점을 중심으로 반지름이 60 인 원 위의 (x,y) 에 대응하여 (x,y,-10) 에 점이 찍히기 때문입니다.  z=f(x,y) 함수의 그래프를 그리고 탐구하는 것은 인공지능과 수학의 핵심적인 기초입니다.

그런데 컴퓨터에게 z=sqrt(x,y) 를 그리려면 컴퓨터가 정확한 값을 계산하는 한계와 터틀크래프트가 정수의 좌표만 사용하는 한계 때문에 적절한 에러를 허용해야 합니다. z=sqrt(x,y) 라는 말은 z-sqrt(x,y)=0 입니다. 적절한 에러를 도입한다는 것은, 예를 들어, -1 < z - sqrt(x,y) < 1 과 같이 양쪽으로 1 만큼씩 에러를 허용하는 조건으로 그래프를 그리는 것입니다. 바로 앞의 부등식 조건으로 그리라는 명령이 다음과 같습니다.

집합  {  abs(   z ,  sqrt(x,y)    )  <  1   }     

 

 

자세한 자유학년제 코딩수학은 SNU코딩수학 유튜브를 참고하세요 !! 

첨부