앵무조개나 솔방울, 해바라기 씨앗 배열 모양 등에서
발견되는 피보나치 나선을 그려보려고 한다.
파이썬(python) 터틀(turtle)을 이용해
피보나치 수(Fibonacci numbers)를 반지름으로 하는
1/4원을 이어 그리는 것이다.
피보나치 수는 첫째와 둘째 항이 1이고,
그 뒤로 바로 앞 두 항의 합이 이어지는 수열이다.
1, 1, 2, 3, 5, 8, 13, 21, 34,... 이런 식이다.
피보나치 수는 기원전 5세기 인도의 수학자 핑갈라가 쓴 책에 처음 나온다는데
유럽에서 레오나르도 피보나치가
새로 태어난 토끼 한 쌍이 자라나
두 달 이상이 되면서 번식하여 매달 새끼 한 쌍을 낳을 때
토끼 수가 어떻게 증가하는지 이야기하면서 언급해
피보나치 수가 되었다니, 핑갈리는 억울하겠다.
피보나치 수의 일반항을 계산하는 공식을 검색했다.
네이버 계산기로 루트 5의 값을 구하니 2.2360679775이다.
이제 간단히 코딩해 보자.
파이썬 터틀 그래픽(Turtle Graphics)을 이용하기 위해
turtle 모듈을 불러온다.
from turtle import *
선색은 무지개의 일곱 가지 색으로 하고
차례대로 불러서 사용하기 위해
색깔을 모아놓은 리스트를 만든다.
리스트는
리스트 이름 = [항 1, 항 2, 항 3,...] 형식으로 만들면 되므로
색깔을 모아 놓은 리스트의 이름을 color라고 하고,
red, orange, yellow, green, blue, indigo, violet을 항으로 한다.
color = [ 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
리스트의 각 항은
리스트 이름[항 번호]을 이용해 불러올 수 있고
첫 번째 항은 0에서 시작하므로
빨간색은 color [0]이 된다.
반복해서 사용하기 위해 항 번호를 저장할 변수를 c라 하면
color [c] 형식이 된다.
색이 7가지만 있으므로
c값이 7보다 작을 때만 1씩 더하고
그렇지 않으면 다시 0을 저장하게 if문을 작성한다.
if(c<7):
c = c + 1
else:
c = 0
변수 rt5를 만들어 루트 5의 값을 저장하면
n번째 피보나치 수 a를 구하는 코드는
위의 공식을 이용해 작성할 수 있다.
rt5 = 2.2360679775
a = 1/rt5 * ( ( (1+rt5)/2)**n - ( (1-rt5)/2 )**n )
터틀그래픽에서 펜의 색은
pencolor(색깔)로 지정하고,
원을 그리는 명령어는
circle(반지름, 회전각도) 이므로
피보나치 수 a를 반지름으로 하는 1/4 원을 그리는 코드는
circle(a, -90)
원이 너무 커지지 않게
14번째 피보나치 수까지만 그리고
그림을 다 그린 다음
거북이 모양의 펜이 가려지게
hideturtle() 명령을 사용하여 코드를 완성하였다.
from turtle import * color = [ 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'] c = 0 for n in range(1, 14): rt5 = 2.2360679775 # 피보나치 수 계산 a = 1/rt5 * ( ( (1+rt5)/2)**n - ( (1-rt5)/2 )**n ) if(c<7): # 선 색을 차례로 선정 pencolor(color[c]) c = c + 1 else: c = 0 pencolor(color[c]) circle(a, -90) hideturtle() # turtle을 숨김 done() |
터틀그래픽에서 색을 채우는 명령어
fillcolor(색깔)와
채우기를 시작하는 명령어
begin_fill()
채우기를 마치게 하는 명령어
end_fill()을 사용하여 조금 변형해 봅니다.
from turtle import * color = [ 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'] c = 0 for n in range(1, 14): rt5 = 2.2360679775 # 피보나치 수 계산 a = 1/rt5 * ( ( (1+rt5)/2)**n - ( (1-rt5)/2 )**n ) if(c<7): # 선 색을 차례로 선정 fillcolor(color[c]) begin_fill() pencolor(color[c]) c = c + 1 else: c = 0 pencolor(color[c]) circle(a, -90) end_fill() hideturtle() # turtle을 숨김 done() |
'Manuals > 파이썬' 카테고리의 다른 글
파이썬 Tkinter 사용법 (1) | 2023.09.03 |
---|---|
파이썬 tkinter, TOEIC 단어 암기 프로그램 (0) | 2023.04.14 |
파이썬 pandas, 액셀 파일 사용 (0) | 2023.04.03 |
파이썬, 체질량지수(BMI)와 정상체중 범위 (0) | 2023.04.03 |
파이썬 GUI, tkinter를 이용한 시간 관리 프로그램 (1) | 2023.03.24 |