第1-6章まとめ課題
- 自分の好きな図あるいはアニメーションを描くプログラムを書いて,Notebookファイルを
第1-6章まとめ課題に投稿して下さい.
第5章の練習問題にある図でも良いし,自分で工夫して考えた図でも良いです.
- この課題では,従来の課題のように授業用のNotebookを編集して提出するのではなく,Notebookファイルを新規作成することを想定しています.Notebookファイルを新規作成するにはGoogle Colabの使い方で説明しているように,Google Driveから作成する方法の他に,別のNotebookファイルをGoogle Colabで実行中に,メニューの「ファイル」->「ノートブックを新規作成」で作成する方法 (この場合はGoogle Driveの「マイドライブ」->「Colab Notebooks」の下に作成されます)もあります.また,ITC-LMSの「教材」->「Google Colab教材」に「第1-6章まとめ課題サンプル」というNotebookを置いたのでそれを編集して提出しても構いません.
- 12/27(日)までに投稿された作品は1/6(水)の講義の際にコンテスト(相互評価)を開催します.
昨年度の作品
昨年度の作品が2019年度アルゴリズム入門 第1-6章まとめ課題にあります.Googleアカウントへのログインを求められたときは,通常のGoogleアカウント「XXX@gmail.com」ではなく,ECCSクラウドメールのアカウント「XXX@g.ecc.u-tokyo.ac.jp」(XXXは10桁の数字ではない方)を使ってログインしてください.他のgmailアカウントで入って,「アクセス権限をリクエスト」しても本人確認できないため,アクセス権を与えることはありません(メール等での連絡もおこないません).
ヒント(簡単な静止画像)
一から作るのが面倒な人は,以下のプログラムの(1)の部分の穴を埋めて
a[y][x]に点(x,y)でのR,G,B値からなる大きさ3の配列を入れるコードを書く
ので良い.
def show_color_picture():
a=ita.array.make3d(50, 50, 3)
for y in range(0, 50):
for x in range(0, 50):
#a[y][x]にRGB値からなる大きさ3の配列(要素は0から1までの実数)を入れる
(1)
return a
ita.plot.image_show(show_color_picture())
たとえば,(1)のところに
a[y][x] = [x / 49, 1 - y / 49, 1]
と入れると,
- 左上(x=0, y=0)の色が[Red,Blue,Green]=[0,1,1]で水色,
- 右上(x=49,y=0)の色が,[Red,Blue,Green]=[1,1,1]で白,
- 左下(x=0,y=49)の色が,[Red,Blue,Green]=[0,1,0]で青,
- 右下(x=49,y=49)の色が,[Red,Blue,Green]=[1,1,0]でマゼンタ
になり,その間を補間した
のような図が得られる.
ヒント(簡単なアニメーション)
先程のプログラムをアニメーションを作成するプログラムに変更することができる.itaライブラリを使ってアニメーションを作成する場合は,静止画像を複数枚用意してそれぞれを配列に入れる.そのため,まずは,さきほどのshow_color_picture() を変更して,t枚目の静止画像を作成する関数にしてみる.
def show_color_picture(t):
a=ita.array.make3d(50, 50, 3)
for y in range(0, 50):
for x in range(0, 50):
#a[y][x]にRGB値からなる大きさ3の配列(要素は0から1までの実数)を入れる
a[y][x] = [x / 49, 1 - y / 49, t / 10]
return a
これを使って,10枚の静止画を作成して1つの配列に入れる関数を作成して,表示させてみる.
def show_animation():
image = ita.array.make1d(10)
for t in range(0, 10):
image[t] = show_color_picture(t)
return image
ita.plot.animation_show(make_animation())
すると,以下のように時間ごとに色が変わっていくアニメーションになる.
ヒント
乱数を使いたい人は
import random
をした上で,random.randrange(0, n)で0以上n-1以下の整数が返る.
IN [1]: random.randrange(3)
OUT[1]: 1
IN [2]: random.randrange(3)
OUT[2]: 0
小数の乱数は random.random() で0.0以上1.0以下の一様乱数が返る.
IN [1]: random.random()
OUT[1]: 0.3163153252111951
IN [2]: random.random()
OUT[2]: 0.9910121225838986
小数値を整数値に変換するには,「int(式)」とする.
IN [1]: int(2.9)
OUT[1]: 2
IN [2]: int(2)
OUT[2]: 2
IN [3]: int(-2.9)
OUT[3]: -2
四捨五入ではないので,注意が必要.