B08 [宿題]

B08_1 (スクリプト)

ねらい: タートルグラフィックを用いた繰り返しによる描画に慣れる.また,ペンの色を変更することを学ぶ.

タートルグラフィックスを用いて,円を少しずつ角度を変えて円形に並べることで描ける多重円の軌跡を表示しなさい.並べる円の数は自由に決めて良いが並べた形が円形に見えること.各円の色はランダムに変更しなさい.メソッドpencolor()を用いて,ペンの色を r, g, b で表された RGB の色として指定すること.全ての円を書き終えたら,多重円の中央に亀を頭を上にして表示しなさい.このとき,多重円以外の余計な軌跡は描かないようにしなさい. B08_1.pyとタートルグラフィックの画面を提出しなさい.

※colormode はデフォルトで 各色を 0.0 − 1.0 の間で指定するようになっている.

ペンの色の指定はメソッド pencolor() を使う.turtle.pencolor()の説明


B08_2 (スクリプト)

ねらい: タートルグラフィックを用いた描画に慣れる.コマンドプロンプトからの入力値でタートルを制御することになれる.

台車の運動を記録タイマーで記録して等加速度運動の様子を調べる実験を,タートルグラフィックでシミュレートしよう.以下の動作をするタートルグラフィックをスクリプトで作成しなさい.B08_2.pyとタートルグラフィックの画面を提出しなさい.

  1. タートルオブジェクトを作成して形を’turtle’に変更して頭が上になるように回転させる.x座標を0として,画面の下端に移動する.

  2. 「加速度として,1−10の整数を入力して下さい:」とメッセージを表示して入力を促す.入力された値を加速度とし,ループの実行ごとに1秒の時間が経過したと考えて加速度から計算された移動距離だけ上方向に亀を移動する.

  3. 文字などの不正な値が入力されたときは,「無効な値が入力されましたので終了します」と表示してプログラム自体を終了する.

※プログラムの終了には,sysモジュールをインポートして,sys.exit()を用いる.

  1. 1秒ごとに直径10,色が赤の点を打って,亀の速度が分かるようにする.

    点はメソッド dot() を使って打つことができる.turtle.dot()の説明

  2. 亀がスクリーンの上端に達したらならば,亀の運動を停止する.

力学台車


B08_3 (スクリプト)

ねらい: タートルグラフィックを用いた描画に慣れる.2つ以上のタートルオブジェクトを操作することに慣れる.

以下のように,ランダムに動き回る亀を,もう一匹の亀が追いかけるタートルグラフィックをスクリプトで作成しなさい.B08_3.pyとタートルグラフィックの画面を提出しなさい.

  1. タートルオブジェクトを2つ作成して形を’turtle’に変更し,亀の色をそれぞれ赤と青にする.また,それぞれの亀は別の色の軌跡を描くようにせよ.

    亀の色はメソッド color() で変更できる.turtle.color()の説明

  2. 赤い亀を90だけ移動させ,青い亀を30だけ前進させる.

  3. その後,まず赤い亀をランダムな方向に移動させ,その後青い亀が赤い亀を追いかけるように移動させ,これを繰り返す.ただし,亀の進行方向と亀の頭の向きは一致することとし,赤い亀の移動速度は青い亀の速度の3倍速いようにせよ(アニメーションが速いのではなく,1ループで移動する距離が3倍大きいということ).

  4. それぞれの亀がスクリーンの端に達したときは,端に達した亀の位置と方向を初期値にリセットし,それまで描いた軌跡を消去せよ.また,亀同士の距離が20以内となった場合,それぞれの亀がそれまでの進行方向と正反対の方向に200移動するようにせよ.

追跡

2匹の亀を生成するスクリプトの例(課題の亀とは異なる).

import turtle

kame1 = turtle.Turtle()
kame1.shape('turtle')
kame1.forward(100)

kame2 = turtle.Turtle()
kame2.shape('turtle')
kame2.left(60)
kame2.forward(100)

turtle.done()

B08_4 (スクリプト,オプション)

ねらい: 自力で関数を理解することに挑戦する.また,再帰的呼び出しに触れる.

以下のコードは再帰プログラムによる樹木曲線の一例であるが,偏っていて左右対称ではない.このプログラムの変数を変更して左右対称の樹木曲線を描くようにせよ.

import turtle
import random

#kame1 = Turtle()
kame1 = turtle.Turtle()

def tree(kame,n, angle=30, length=100, skew=0, r_ratio=8/10, l_ratio=6/10):
    if n < 0:
        return
    kame.pencolor(random.random(), random.random(), random.random())
    kame.fd(length)
    kame.lt(angle+skew)

    tree(kame, n-1, angle, length * r_ratio)

    kame.rt(angle * 2)

    tree(kame, n-1, angle, length * l_ratio)

    kame.lt(angle-skew)
    kame.bk(length)

if __name__ == '__main__':
    kame1.lt(90)
    kame1.pu()
    kame1.bk(100)
    kame1.pd()
    kame1.speed(0)

    tree(kame1, 9, 40, skew=5)

    kame1.shape('turtle')
    kame1.shapesize(3,3,2)
    kame1.goto(0,-100)
    kame1.color(random.random(), random.random(), random.random())

turtle.done()

偏りのある木

木