Turtleグラフィックス① Turtleグラフィックスの基本

Image from Gyazo

Turtleグラフィックス

Turtleグラフィックスは, タートル(Turtle)と呼ばれるカーソルを動かしてベクトル・グラフィックを描画するためのライブラリ(モジュール)です. 1967年にSeymour Papert氏らが, Logoと呼ばれる教育用プログラミング言語の機能の一つとして導入しました. Turtleグラフィックスは,Pythonの標準ライブラリとしても導入されており,Pythonの初学者向けのツールとして利用されます. 標準的なTurtleグラフィックスは2次元の直交座標系(XY平面)に描画しますが, 3次元に拡張されたCheloniidae Turtle Graphicsなども存在します. 本授業ではTurtleグラフィックスを利用して,Pythonの制御構文や関数など学習していきましょう.

準備

Muエディタを起動したら,Python3 モードを選択しましょう. ツールバーにある「保存」をクリックして,「chapter2.py」という名前でスクリプトを保存します.

MuエディタでTurtleグラフィックスを利用するには, 次のように記述してライブラリ(モジュール)を インポート(import) します. インポートとは「プログラムの中で利用可能な状態にする」ことを意味しています.

# Turtleグラフィックスのライブラリをインポート
from turtle import *

Turtleグラフィックスの使い方

ここでは,Turtleグラフィックスの基本的な使い方を学習しましょう.

タートルの位置と向き

タートルの初期状態を確認します. position()はタートルの位置を表す関数, heading()はタートルの向き(角度)を表す関数です. これらの値をprint()でコンソールに出力します. 実行すると,タートルの座標は原点の(0.00,0.00),向きは0度(右方向)であることがわかります(上方向は90度,左方向は180度,下方向は270度).

print(position()) # タートルの座標 -> (0.00,0.00)
print(heading()) # タートルの向き -> 0.0

コンソールへの出力だけでなく,タートルの描画結果を表すスクリーン(ウィンドウ)が表示されます. タートルは矢印で表され,スクリーンの中央(原点)に,右を向いた矢印が描画されていることがわかります.

Image from Gyazo

タートルの前進

タートルを進行方向に前進させるにはforward()を用います. ()の中に記述する数値が,進む距離(単位はピクセル)を表します. ここでは,進行方向(右)に200だけ前進させてみましょう. タートルの座標は(200.00,0.00)になり,矢印が右方向に動くことが確認できます.

forward(200) # 200だけ前進
print(position()) # タートルの座標 -> (200.00,0.00)
print(heading()) # タートルの向き -> 0.0

Image from Gyazo

タートルの回転

タートルを右向きに回転させるにはright(),左向きに回転させるにはleft()を用います. ()の中に記述する数値は,回転する角度を表します. ここでは,右方向に90度だけ回転し,さらに200だけ前進させてみましょう. タートルの座標は(200.00,-200.00)になり,向きは270になっていることが確認できます.

right(90) # 90度だけ右回転
forward(200) # 200だけ前進
print(position()) # タートルの座標 -> (200.00,-200.00)
print(heading()) # タートルの向き -> 270.0

Image from Gyazo

タートルの移動

座標を指定してタートルを移動させるにはgoto()を利用します. ()の中には移動先の座標を表すxyの数値を記述します. このとき,penup()をすると直線を描くことなく,指定された座標に移動します. 元のように移動に合わせて直線を描くには,pendown()を実行します. ペンの状態に合わせて,描画の有無が切り替わることが確認できます.

penup() # 直線を描画しない
goto(-200, -200) # タートルを(-200,-200)に移動
pendown() # 直線を描画する
goto(-200, 200) # タートルを(-200,200)に移動
print(position()) # タートルの座標 -> (-200.00,200.00)
print(heading()) # タートルの向き -> 270.0

Image from Gyazo

例題1

次の図を参考に正方形を描いてください.

Image from Gyazo

ペンの色と太さ

ペンの色や太さを変更してみましょう.

ペンの色

ペンの色を変更するにはcolor()を用います. ()の中には色を表すredgreenなどの文字列を指定します. 指定可能な色はrgb.txtに列挙されています. 16進数の表現を用いて#ff0000#00ff00などと指定することも可能です. ここでは,ペンの色を赤(red),緑(green),青(blue),ピンク(pink)に変えながら直線を描画します.

penup()
goto(-200, 0)
pendown()

color("red")
forward(100)

color("green")
forward(100)

color("blue")
forward(100)

color("pink")
forward(100)

Image from Gyazo

colormode()で色モードを指定して,RGB(赤,緑,青)の3色の組み合わせで,色を表現することも可能です. 色モードを「1.0」に設定すると0.0〜1.0の範囲,また,色モードを「255」に設定すると0〜255の範囲で色の強さを表現します. RGBの値は原色大辞典を参考にすると良いです.

penup()
goto(-200, 0)
pendown()

colormode(255) # 0〜255の範囲で指定

color(255, 0, 0) # 赤
forward(100)

color(0, 255, 0) # 緑
forward(100)

color(0, 0, 255) # 青
forward(100)

color(234, 145, 152) # ピンク
forward(100)

Image from Gyazo

ペンの太さ

ペンの太さを変更するにはpensize()を用います. ()の中にはペンの太さ(単位はピクセル)を指定します. ここでは,ペンの太さを5101520に変化させながら,直線を描画しています.

penup()
goto(-200, 0)
pendown()

pensize(5)
forward(100)

pensize(10)
forward(100)

pensize(15)
forward(100)

pensize(20)
forward(100)

Image from Gyazo

例題2

次の図を参考に正三角形を描いてください.

Image from Gyazo

その他の関数

アニメーションの速度

タートルのアニメーションの速度を変更するにはspeed()を用います. ()の中には0〜10の範囲で速度を指定します. 10が最も速く,1が最もゆっくり描画します. また,タートルのアニメーションが不要であれば0を指定すると良いです.

speed(10) # 高速
speed(1) # 低速
speed(0) # アニメーションなし

スクリーンの背景色

スクリーン(ウィンドウ)の背景色を指定するにはbgcolor()を用います. ()の中には,ペンの色を設定するcolor()と同様に,文字列や16進数で色を指定します.

bgcolor("yellow") # 背景色を黄色に設定

タートル(矢印)の表示・非表示

タートル(矢印)を表示するにはshowturtle(),非表示にするにはhideturtle()を用います. 描画された結果だけを表示したいときは,hideturtle()でタートルを隠しておきましょう.

showturtle() # タートルの表示
hideturtle() # タートルの非表示

課題

次の課題に取り組んでください.

Image from Gyazo

課題を完成させたらスクリプトを保存し,「chapter2.py」を提出してください.

参考書籍

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