파이썬_거북이로 나무 그리기::::수학과 사는 이야기

파이썬_거북이로 나무 그리기

수학이야기 2024. 7. 27. 11:11
반응형

아주 오랜만에 거북수학을 다시 살펴본다. 요즘 유튜브에 빠져 지내는데 알고리즘이 추천한 유튜버를 따라서 만들었다. 훗날을 위해 여기에 적어 둔다. 4단계로 만들어 간다.

>>>import turtle as t

1단계 나무를 그리기 위한 기본 틀이다. 재귀함수를 쓰려면 제자리로 돌아와야 좋다.

def tree01(length):
    t.fd(length)
    t.lt(60)
    t.fd(length)
    t.backward(length)
    t.rt(120)
    t.fd(length)
    t.backward(length)
    t.lt(60)
    t.backward(length)

 


이제 함수 안에 자기와 같은 함수를 다시 불러들인다. 이런 함수를 재귀함수라고 한다. 여러 가지 프랙탈 그림을 그릴 때 유용하다. 가지의 길이를 단계가 거듭될 때마다 짧아지게 만든다 (length*0.7) . 무한 반복을 피하기 위해 한계를 설정한다.( if length>12:)

def tree02(length):
    if length>12:
        t.fd(length)
        t.lt(60)
        tree02(length*0.7)
        t.rt(120)
        tree02(length*0.7)
        t.lt(60)
        t.backward(length)

더 자연스러운 모양을 만들기위해 회전각의 크기와 가지의 길이를 임의로 정하게 만든다. 이렇게 하려면 패키지를 불러들여야 한다.

>>>import random

def tree03(length):
    angle=random.randint(15,30)
    branch=random.uniform(0.6,0.9)
    if length>12:
        t.fd(length)
        t.lt(angle)
        tree03(length*branch)
        t.rt(angle*2)
        tree03(length*branch)
        t.lt(angle)
        t.backward(length)

마지막으로 가지의 굵기를 달라지게 만들면 더 자연스러운 나무 그림을 얻을 수 있다. 유튜버는 나뭇잎까지 그리고 있지만 나는 여기까지만 해 본다.

def tree(length, pen_size):
    angle=random.randint(15,30)
    branch=random.uniform(0.6,0.9)
    if length>12:
        t.pensize(pen_size)
        pen_size*=0.7
        t.fd(length)
        t.lt(angle)
        tree(length*branch, pen_size)
        t.rt(angle*2)
        tree(length*branch, pen_size)
        t.lt(angle)
        t.backward(length)

반응형