Python の turtle モジュールで直感的に図形を描く入門ガイド

Python 標準ライブラリに含まれる turtle モジュールは、初心者向けの視覚的プログラミング学習ツールとして広く知られています。座標系と方向を持つ「亀(タートル)」を制御することで、シンプルなコマンドで幾何学的図形やアニメーションを実現できます。

1. 描画領域の設定

描画を開始する前に、ウィンドウサイズや背景を調整します。

  • turtle.screensize(width, height, bg):キャンバスの論理サイズ(ピクセル単位)と背景色を指定します。
    例:turtle.screensize(720, 480, "lightblue")
  • turtle.setup(width, height, startx, starty):実際のウィンドウサイズと位置を定義します。
    幅・高さが小数の場合は画面比率、整数の場合はピクセル単位です。
    例:turtle.setup(0.8, 0.6, 50, 50) — 画面の80%×60%で、左上角を(50, 50)に配置

2. タートルの状態と属性

タートルは「位置」と「向き」の2つの状態を持ち、初期状態では原点(0, 0)に向きをx軸正方向(右)に向けた状態です。

基本属性の操作

  • turtle.pensize(n):ペンの線幅(ピクセル)を設定
  • turtle.pencolor("purple") または turtle.pencolor(r, g, b):描画色を指定(RGB値は0–255)
  • turtle.speed(n):描画速度(0=即時描画、1–10=段階的加速)
  • turtle.color("blue", "cyan"):描画色と塗りつぶし色を同時に設定

3. 主要な制御命令

移動と回転

メソッド説明
forward(dist)現在の向きに dist ピクセル進む
goto(x, y)絶対座標 (x, y) へ移動(ペンアップ中なら線を引かない)
right(angle)時計回りに angle 度回転
left(angle)反時計回りに angle 度回転

描画モード制御

  • penup():ペンを上げて移動 → 線を描かない
  • pendown():ペンを下ろして移動 → 線を描く(デフォルト)
  • begin_fill()/end_fill():閉じた形状の内部を塗りつぶす

円と弧の描画

turtle.circle(radius, extent=None, steps=None) を使い分けることで、円・半円・多角形・弧を柔軟に表現できます。

  • circle(60):半径60の完全な円
  • circle(60, 180):半径60、180度の弧(半円)
  • circle(60, steps=6):半径60の円に内接する正六角形

4. 実践サンプル

4.1 動的な星型パターン

import turtle as t

t.speed(0)
t.color("navy", "gold")
t.begin_fill()

for i in range(36):
    t.forward(180)
    t.left(170)  # 少しずつずらすことで放射状効果
t.end_fill()
t.hideturtle()

4.2 スパイラル蛇(カスタム関数による再利用)

def draw_spiral_snake(segment_count=3, base_radius=45, turn_angle=75):
    for _ in range(segment_count):
        t.circle(base_radius, turn_angle)
        t.circle(-base_radius * 0.7, turn_angle)
    t.circle(base_radius, turn_angle / 2)
    t.forward(base_radius * 0.6)
    t.circle(base_radius * 0.2, 180)
    t.forward(base_radius * 0.3)

t.setup(900, 700)
t.pensize(22)
t.pencolor((40, 160, 60))
t.seth(-25)
draw_spiral_snake()

4.3 正五角形とテキスト注釈

t.pensize(6)
t.color("darkorange", "coral")
t.begin_fill()

for _ in range(5):
    t.forward(160)
    t.right(144)
t.end_fill()

t.penup()
t.goto(-120, -100)
t.color("indigo")
t.write("★ Pentagon ★", font=("Verdana", 24, "bold"))

4.4 抽象化された動物モチーフ(簡易版)

複雑なキャラクターではなく、曲線と円を組み合わせた抽象表現で理解を深めます:

# 耳と顔の輪郭をシンプルに再構成
t.pensize(8)
t.color("peachpuff", "pink")
t.penup()
t.goto(0, -50)
t.pendown()
t.begin_fill()
t.circle(120)  # 顔

# 左耳
t.penup()
t.goto(-70, 60)
t.pendown()
t.circle(35)

# 右耳
t.penup()
t.goto(70, 60)
t.pendown()
t.circle(35)
t.end_fill()

# 目(2点)
t.penup()
t.goto(-40, 20)
t.dot(20, "black")
t.goto(40, 20)
t.dot(20, "black")

t.hideturtle()

タグ: turtle python-graphics beginner-programming

10月16日 21:45 投稿