본문 바로가기
프로그래밍/파이썬기초

turtle모듈 사용해보기, 시에르핀스키 삼각형 그리기_파이썬 기초

by 조크리 2021. 4. 2.
반응형

 

오늘의 목표

1. 프렉탈 알아보기

2. turtle모듈 사용해보기

3. turtle모듈로 시에르핀스키 삼각형 그리기 

 

 

 

1. 프렉탈(fractal)이란?

 

프렉탈이란 자기 유사성(self-similar)을 갖는 그림이고 순환성(recusive)을 갖는 그림이다. 

 

출처  https://ko.wikipedia.org/wiki/%ED%94%84%EB%9E%99%ED%83%88

 

만델브로트가 1967년에 사이언스지에 '영국 해안선의 길이는 얼마인가?'를 발표하면서 프렉탈이라는 용어가 굳혀졌다. 

 

1975년에 만델브로는 "프랙탈"이라는 단어로 수백년에 걸친 사고와 수학적 발전을 굳히고, 인상적인 컴퓨터 건축 시각화로 그의 수학적 정의를 묘사했다.  - 출처 위키피디아 -

만델브로트는 IBM의 석좌 사이언티스트로 일했으며 그래픽 관련 일을 했었는데 영국 해안선 길이는 왜 궁금했을까..ㅎㅎ

 

2. 시에르핀스키 삼각형

 

시에르핀스키(시어핀스키) 

정삼각형의 세변의 중점을 이어 삼각형을 만들고, 이 과정을 무한히 반복하여 만든 프렉탈 모양

남아있는 면적은? 길이는? 

출처 https://watericious.tistory.com/201

 

처음 삼각형의 면적 = S

두 번째 단계 = 3/4 * S

세 번째 단계 = 3/4 * 3/4 * S

쭉 하다보면 결국에는 0으로 수렴한다. 

 

처음 삼각형의 둘레 = 3 * L

두 번째 단계 = 3 * 1/2 * L * 3 

세 번째 단계 = 

쭉 하다보면 결국에는 무한대가 된다. 

 

 

3. 파이썬 turtle모듈 사용하기 

 

파이썬에서 turtle 모듈을 사용하려면 turtle모듈을 import 해주어야 한다!

 

먼저 repl.it 사이트에서 기본 turtle모듈을 사용해보자!

 

import turtle as t
 
def box(x,y,color):
    t.color(color)
    t.fd(x)
    t.left(90)
    t.fd(y)
    t.left(90)
    t.fd(x)
    t.left(90)
    t.fd(y)
 
box(100,50,'red')

네모에 색깔도 채워보았다. 

 

사람도 만들어보았다. 

출처 : opentutorials.org/module/2980/17298

import turtle as t
 
def box(pos_x,pos_y,x,y,color):
    t.penup()
    t.goto(pos_x - x/2,pos_y - y/2)  
    t.speed('normal')
    t.color(color)
    t.begin_fill()
    t.fd(x)
    t.left(90)
    t.fd(y)
    t.left(90)
    t.fd(x)
    t.left(90)
    t.fd(y)
    t.left(90)
    t.end_fill()
     
#foot
box(-50,-150,80,50,'blue')
box( 50,-150,80,50,'blue')
 
#leg
box(-50,-80,20,100,'red')
box( 50,-80,20,100,'red')
 
#body
box(0,50,150,150,'yellow')
 
#arm
box(120,70,80,20,'green')
box(-120,70,80,20,'green')
 
#head
box(0,160,80,70,'pink')
 
#eye
box(10,170,10,10,'black')
box(-10,170,10,10,'black')
 
#mouth
box(0,150,30,10,'black')
 
t.hideturtle()      #커서감추기
input("")

이번에는 꽃 모양을 그려보자 

import turtle

myturtle = turtle.Turtle()
myturtle.color('red', 'yellow')
myturtle.begin_fill()
myturtle.speed('fast')
while True:
    myturtle.forward(300)
    myturtle.left(110)
    if abs(myturtle.pos()) < 1:
        break
myturtle.end_fill()

turtle.done()

 

 

 

 

4. 파이썬 turtle모듈로 시에르 삼각형 그리기

아래의 코드대로 쓰면 어떻게 될까?

 

출처 : m.blog.naver.com/gitae1203/221618872452

import turtle as t


def tri(tri_len):

    if tri_len <= 10:

        for i in range(0,3):

            t.forward(tri_len)

            t.left(120)

        return


    new_len=tri_len/2

    tri(new_len)

    t.forward(new_len)

    tri(new_len)

    t.backward(new_len)

    t.left(60)

    t.forward(new_len)

    t.right(60)

    tri(new_len)

    t.left(60)

    t.backward(new_len)

    t.right(60)



t.speed(5)

tri(100) #함수 호출

t.hideturtle()

t.done()

 

오늘의 목표 달성 끝~!

 

turtle 모듈을 활용하여 프렉탈을 만드는 함수를 써보았다~!

 

어렵다...ㅠㅠ 

반응형