【Python】色が変化する螺旋状の図形を描画する方法
この記事は、Pythonのturtleライブラリを使って、簡易的に設定している色を使って螺旋状の図形を描画するものです。python初心者にもわかりやすいturtleライブラリ入門としてこの記事を読んでいただければ幸いです。
プログラムの概要
この螺旋状の図形は、6色の色を「turtle」の「circle」を使って表現しています。簡単なプログラミングから色とcircleだけでここまでの表現が可能です。
使用しているライブラリーやモジュールについて
基本構文は下記のようになります
turtle.circle(radius, extent=None, steps=None)
radius が正の場合、弧は反時計回りに描かれます。そうでなければ、時計回りです。簡単な説明は、下記に記載しておきます。円の大きさや角度についてしっかりと把握しておくと、いつcircleをどのように使えば良いかを理解する必要があります。詳しくは、本家サイトをご覧ください。
タートルグラフィックスについては本家サイトからーーー> ここをクリック
turtle.circle(radius, extent=None, steps=None)
半径 radius の円を描きます。中心はタートルの左 radius ユニットの点です。 extentは、角度です
円のどの部分を描くかを決定します。 extent が与えられなければ、デフォルトで完全な円になります。
螺旋状の図形を描画する方法
プログラムの解説を項目ごとに説明していきます
3行目までの解説
〇1行目 import turtle as Tu
turtleライブラリをインポートし、Tuという名称に変更しています。
〇2行目と3行目
t = Tu.Turtle()
s = Tu.Screen()
turtleクラスのインスタンスを作成し、t、sという変数に代入しています。ここが重要です。この行が入力されていないとここより下のプログラムでは、全て「Tu.Turtle().●●」という書き方になり大変です
6行目までの解説
〇4行目 s.bgcolor('black')
背景を黒色にしています
〇6行目 color = ('cyan','yellow','pink'
変数「color」へ6色代入しています
7行目からのfor文内の説明
〇7行目からのfor文
「t.pencolor(color[i%6])」は、繰り返し処理で取得したiに対して、6で割った余りをcolor配列のインデックスにして、color配列から色を取得し、ペンの色を設定しています。
「i%6」の使い方は、他のプログラムと同じです。pythonから学んだ人は、馴染みのない考え方です。「3÷6」はあまり3になります。
「t.circle(190-i/2,90)」は、繰り返し処理で取得したiから半径を計算し、円を描画し、90度の回転を行っています。前回の花を記載した方法と同じです(そちらの記事はここをクリック)
「t.lt(90)」は、左に90度回転します。
「t.getscreen()._root.mainloop()」は、螺旋状の図形を描画後にすぐに消えないようにする命令文。図形を描くために必要な文ではありません。Windowの右上の「×」をクリックしないとWindowが閉じなくなるので注意してください。
サンプルコード
コピー&ペーストで動作します。描画スピードを遅くしたい場合は、「t.speed(0)」の0→100くらい変更してください。気持ち遅くなります。
import turtle as Tu #Tuという名称へ変更してturtleをインポート
t = Tu.Turtle()
s = Tu.Screen()
s.bgcolor('black')
t.speed(0)
color = ('cyan','yellow','pink','red','light green','blue')
for i in range(120):
t.pencolor(color[i%6])
t.circle(190-i/2,90)
t.lt(90)
t.circle(190-i/3,90)
t.lt(60)
t.getscreen()._root.mainloop()
動画
プログラムが動作している動画はこちらから
まとめ
PythonのTurtleライブラリを使用して、螺旋状の図形を描画する方法を紹介しました。
今回のコードでは、「for文」「割り算の余りの使い方」「circleを使った様々な描画」「基本色を使った表現方法」を取り入れてみました。
このプログラムはどのような用途に使用できるのか、どのように拡張して利用することができるのかを今回コードを色々変えて遊んでみてください。
Let's start programming
他のpythonはこちら ーーー> ここをクリック