파이썬_거북이로 나무 그리기
수학이야기 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)