投稿

Python会〜タートルグラフィックスで幾何学模様を作ったよ。

はじめに

前回の内容はこちら:Python〜ev3とVSCodeで音楽作り

Pythonのタートルグラフィックスで幾何学模様を作ってみました。タートルグラフィックスは画面上に表示される亀を移動させることで、亀の動いた跡が線として描かれます。1967年にLOGO言語とともに登場し、プログラムの結果をすぐに目で見て確認できるため、理解しやすく、プログラミング教育でもよく使われています。
今回は、このタートルグラフィックスにフィボナッチ数列を使うことで、幾何学模様を簡単に作る方法を紹介します。

今回、参加した子達が作った幾何学模様

目次

1.タートルグラフィックスを使った基本的な図形の書き方
2.フィボナッチ数列について
3.フィボナッチ数列を使った幾何学模様の書き方

1.タートルグラフィックスを使った基本的な図形の書き方

エディターはVsCodeを使用しています。まずは、タートルグラフィックスで基本的な図形の書き方として、円を描いてみましょう。コメントアウトで説明しています。

from turtle import * #タートルグラフィックスを使えるようにする
color('red') #ペンの色
pensize(2) #ペンの太さ
speed(0) #描くスピード 0が一番速い

#円の描き方
begin_fill() #塗りつぶしスタート
circle(50) #半径50の円を描く
end_fill() #塗りつぶし終わり
done() #処理が終わっても表示させる

circle()内の数字を変えることで円の大きさが変わります。また、塗りつぶしをしない場合は、begin_fill()とend_fill()をコメントアウトするか削除してください。
三角形の場合は、亀が100前に進み、進行方向から120度左に向きを変えるという動作を3回繰り返すことで描くことが出来ます。

#三角形の描き方
color('pink')
begin_fill()
for i in range(3): #3回繰り返す
    forward(100) #前に100進む
    left(120) #左に120度曲がる 
end_fill()
done()

三角形と同じ要領で、他の多角形も描いてみましょう。四角形なら、下のコードのXを4に置き換えます。

#多角形の描き方
color('pink')
begin_fill()
for i in range(X): #xに描きたい辺の数を入力
    forward(100) #前に100進む
    right(360/X) 
end_fill()
done()

Xに9を入れた場合は、9角形が出来ます。

多角形が作れたら、
right(360/X)の行を、right(360/X*n)にして、nに整数を入れてみると、どんな図形になるか色々実行してみよう。例えば、X=5,n=2にすると、下のような星の形になります。

2.フィボナッチ数列について

フィボナッチ数列は、1,1,2,3,5,8,13,21,34,55,89,144,233,……といったように、最初の二つの1をのぞいて、三つ目以降は、前の二つの数を足した数で出来た数列です。このフィボナッチ数列は不思議と自然界に深く関係しています。例えば、ひまわりのタネの並び方や、オウムガイやDNAの螺旋構造、木の枝の別れ方などにもフィボナッチ数列やフィボナッチ数が出現します。また、私たちが美しいと感じる黄金比にも関係しているという神秘的な数列です。

まず、フィボナッチ数列のリストを作ってみます。フィボナッチ数は前の二つの数字の和になるという特徴を利用します。ここでは、6回繰り返しているので、1,1,2,3,5,8,13,21,34,55,89,144,233,377の数列が完成します。

a=1
b=1
fibonacci=[1,1] #fibonacciという名前のリストに1と1が入っている
for i in range(6):#6回繰り返す
a +b = a #aの値にbの値を足してaの値を更新
b +a = b #bの値にaの値を足してbの値を更新
fibonacci.append(a) #aの値をfibonacciリストに追加
fibonacci.append(b) #bの値をfibonacciリストに追加

3.フィボナッチ数列を使った幾何学模様の書き方

先ほど作ったfibonacciリストを使って幾何学模様を描いてみましょう。fibonacci数列のリストを作った後に、fibo_circleという関数を作り、パラメーターを設定します。

from turtle import*
a=1
b=1
fibonacci=[1,1]

for i in range(6):
  a = a+b
  b = b+a
  fibonacci.append(a)
  fibonacci.append(b)

def fibo_circle(iro,muki,okisa,kakudo,hane,hen):#fibo_circleという名前の関数を作る。
  for i in range(hane):#羽の数だけ繰り返す
    for j in fibonacci:#fibonacciに入っている数で繰り返す
      pencolor(iro)#ペンの色
      pensize(2)#ペンの太さ
      circle(j/okisa,kakudo*muki,hen)
    speed(0)
    penup()#ペンを上にあげる
    home()#ペンの位置をホームに戻す
    pendown()#ペンを下に下げる
    rt(360/hane*(i+1))
fibo_circle('skyblue',1,4,270,8,12) #パラメータに好きな値を入力する。この場合は、色=skyblue, muki=反時計回り,okisa=4,kakudo=270度,hane = 8,hen = 12となっている

fibo_circle(iro,muki,okisa,kakudo,hane,hen)のパラメーターの解説

iro ペンの色
muki -1 = 時計回りに動く、 1 =反時計回りに動く
okisa 小さくすると描かれる図形が大きくなります
kakudo 描く円弧の大きさ

↑kakudo による図形の違い

hane 何回、同じパターンを繰り返すか

↑hane の数による図形の違い

hen 多角形の形。henのパラメーターを入れない場合は、円形になる。その場合は、def fibo_circle(iro,muki,okisa,kakudo,hane,hen):の行から、henを削除する。

↑hen の数による図形の違い

あとは、fibo_circle()の中の各パラメータに好きな値を設定するだけで、様々な模様が描けます。