Pythonの基礎・Turtleで図形を描いてみよう

Image from Gyazo

Turtleグラフィックス

Turtleグラフィックスは, 1967年に教育向けに設計されたプログラミング言語 LOGOで実装された コンピュータ・グラフィックスの機能です. ユーザが記述したプログラムに応じて,亀(タートル) の形をしたカーソルを操作して, 自由にコンピュータ・グラフィックスを作成することが可能です. 近年,データ分析や人工知能(AI)などの分野で採用されるプログラミング言語Pythonにも, Turtleグラフィックスが標準ライブラリとして組み込まれており, Pythonの基礎を学ぶために利用されています. ここでは,将来,授業や研究でPythonを活用するための準備として, TurtleグラフィックスでPythonの基礎を学びましょう.

Google Colaboratory

Pythonの開発環境として,Google Colaboratory(略称: Colab)を利用します. 下記のリンクをクリックして,Colabにアクセスしましょう.

Google Colaboratory

Colabにアクセスしたら,大学のGmailアカウント(@g.sugiyama-u.ac.jp)でログインしていることを確認してください. 次に,ノートブック(ファイル)を新規作成し,ノートブックの名前を chapter1.ipynb に変更しましょう.

Image from Gyazo

Colabの使い方

Colabではコードセルと呼ばれる入力フィールドにPythonのコードを入力します. コードセルを増やして,1+22*3print("Hello Turtle!")と入力してみましょう. 入力したらコードセルの左端にある「セルを実行」をクリックします. 実行するとコードセルの実行結果である36Hello Turtle!が出力されることが確認できます. printは文字を出力するためのPythonの命令文です. このように,適宜,コードセルを増やしながら,Pythonのコードを追加で記述して行きます.

Image from Gyazo

ColabTurtleのインストール

ColabでTurtleグラフィックスを利用するには, ColabTutrleというライブラリを利用します(Pythonの標準ライブラリとは異なるので注意). このライブラリは MITライセンス が付与されたオープンソース・ソフトウェア(OSS)です. インストールするには下記のコードを,コードセルに入力します.

!pip install ColabTurtle
from ColabTurtle.Turtle import *

図形の描画

Turtleグラフィックスを利用するための準備は整いました. 早速,様々な図形を描画して行きましょう.

正方形を描く

まずは,正方形を描いてみましょう. 図形を描くときは,最初にinitializeTurtle()を実行し,カーソル(亀)の位置や向きを初期化します. 実行結果として,幅:$800$px,高さ:$500$pxのキャンバスが表示され, キャンバスの中央に上を向いた亀が表示されます. この亀を動かしながら図形を描画していきます.

initializeTurtle()

Image from Gyazo

ペンを上げたままで,亀を座標$(100, 400)$に移動し,ペンを下ろして,亀の進行方向(ここでは上方向)に$300$だけ移動させます. ペンを下ろした状態で亀を移動させると,その軌跡が線として描画されます. このとき,ペンを上げるにはpenup,亀を特定の座標に移動させるにはgoto, ペンを下ろすにはpendown,亀を進行方向に移動させるにはforwardを指示します. この結果,正方形の左側の辺が描画されます.

penup()
goto(100, 400)
pendown()
forward(300)
penup()

Image from Gyazo

次に,ペンを下ろして,亀を右に$90$度だけ回転させ,亀の進行方向(ここでは右方向)に$300$だけ移動させます. 亀の向きを右方向に回転させるにはright,左方向に回転させるにはleftを指示します. この結果,正方形の上側の辺が描画されます.

pendown()
right(90)
forward(300)
penup()

Image from Gyazo

最後に,ペンを下ろして,亀の右向き$90$度の回転と,亀の進行方向への$300$の移動を,2回繰り返します. この結果,正方形の右側と下側の辺が描画され,正方形が完成します.

pendown()
right(90)
forward(300)
right(90)
forward(300)
penup()

Image from Gyazo

正三角形を描く

次は正三角形を描いてみましょう. 正方形と異なるのは,亀の回転する角度と,亀の移動の繰り返しの回数です 正方形では,$90$度の回転をしていましたが,正三角形では,$120$度の回転が必要です(内角が$60$度のため). また,正三角形は3辺で構成されるため,3回の繰り返しで完成します. ただし,初期状態では亀は上方向を向いているため,最初の回転だけは$120+30$度回転させています.

initializeTurtle()

penup()
goto(300, 100)

pendown()

right(150)
forward(300)

right(120)
forward(300)

right(120)
forward(300)

penup()

Image from Gyazo

星を描く

最後は星を描いてみましょう. 星では,$144$度の回転が必要です(内角が$36$度のため). ここでは,星の左端の点から書き始めるため,最初の回転だけは$90$度に設定しています. また,星は5辺で構成されるため,5回の繰り返しで完成します.

initializeTurtle()

penup()
goto(200, 200)

pendown()

right(90)
forward(300)

right(144)
forward(300)

right(144)
forward(300)

right(144)
forward(300)

right(144)
forward(300)

penup()

Image from Gyazo

ペンの色とサイズ

ペンの色やサイズを変えて図形を描画することが可能です.

ペンの色を変える

ペンの色を変えてみましょう. ペンの色を設定するにはcolorを指示します. 指定できる色名はHTMLの標準色とされている140種類です. このとき,色の3原色である赤,緑,青の成分の組わせで色を表現することも可能です(color(r,g,b)で指定する). ここでは,赤,青,緑,黄色,紫,ピンクの順に色を変えて,直線を描いています.

initializeTurtle()

penup()

goto(100, 250)
right(90)

pendown()

color("red")
forward(100)

color("blue")
forward(100)

color("green")
forward(100)

color("yellow")
forward(100)

color("purple")
forward(100)

color("pink")
forward(100)

penup()

Image from Gyazo

ペンのサイズを変える

ペンのサイズを変えてみましょう. ペンのサイズを指定するにはpensizeを指示します. ここでは,4,8,12,16,20,24の順に太さを変えて,直線を描いています.

initializeTurtle()

penup()

goto(100, 250)
right(90)

pendown()

pensize(4)
forward(100)

pensize(8)
forward(100)

pensize(12)
forward(100)

pensize(16)
forward(100)

pensize(20)
forward(100)

pensize(24)
forward(100)

penup()

Image from Gyazo

文字の描画

図形だけでなく文字を描画することも可能です. 文字を描画するにはwriteを指示します. writeには,描画する文字と,文字のフォントを指定します. フォントは,文字の大きさ,フォントの種類,フォントのスタイルで構成されます. ここでは,T,U,R,T,L,Eの順に,文字を描いています.

initializeTurtle()

penup()

goto(100, 250)
right(90)

write("T", font=(40, "Arial", "normal"))
forward(100)

write("U", font=(40, "Arial", "normal"))
forward(100)

write("R", font=(40, "Arial", "normal"))
forward(100)

write("T", font=(40, "Arial", "normal"))
forward(100)

write("L", font=(40, "Arial", "normal"))
forward(100)

write("E", font=(40, "Arial", "normal"))
forward(100)

Image from Gyazo

課題

下図を参考に正五角形を描いてください. 亀のスタートの座標は(300, 100)とする.

Image from Gyazo

課題が完成したら,Google Colaboratoryで作成した chapter1.ipynb を保存し, 共有用のリンクノートブック(.ipynb) をダウンロードして提出してください. 提出の前に必ず下記の設定を行ってください.

参考図書

愛知県名古屋市にある椙山女学園大学 文化情報学部 向研究室の公式サイトです. 専門は情報科学であり,人工知能やデータベースなどの技術要素を指導しています. この公式サイトでは,授業で使用している教材を公開すると共に, ベールに包まれた女子大教員のミステリアスな日常を4コマ漫画でお伝えしていきます. サイトに関するご意見やご質問はFacebookまたはTwitterでお問い合わせください.