N.Y.Cityのまちかど
PythonAnimation
Pythonで簡単なアニメーションを作る
作り方
Pythonの画像ライブラリPillow(PIL)を使用する。 各コマの画像を生成したあとに、GIFアニメーションファイルとして書き出す。
「等加速度直線運動」
from PIL import Image, ImageDraw images = [] #各コマを収める配列を宣言 width = 1000 #画面横幅 height = 300 #画面縦幅 center = height // 2 #縦中心位置 color_bk = (0, 0, 0) #黒色を示すベクトル color_white = (255, 255, 255) #白色を示すベクトル color_gray = (128,128,128) #グレーを示すベクトル r=20 #メイン玉の半径 dotr = 2 #軌跡を表すドットの半径 x=-r #メイン玉の初期位置(左側画面外から開始) t=0 #時刻初期値0 a=0.7 #加速度 dotlist = [] #軌跡点情報を収める配列を宣言 #メイン玉が右画面外にはみ出すまで続ける while x<=(width + r): #等加速度直線運動 v= a*t #速度の算出 x = 0.5*a*t*t #横位置の算出 print(f't={t},v={v},x={x}') #デバッグ用画面表示 im = Image.new('RGB', (width, height), color_gray) #コマ画像オブジェクト生成 draw = ImageDraw.Draw(im) #時刻が3スロット経過するごとに軌跡を追加する if t % 3 == 0: dotlist.append(x) #軌跡点を追加 #軌跡点を描画 for dx in dotlist: draw.ellipse((dx-dotr, center - dotr, dx+ dotr, center + dotr), fill=color_white) #メイン玉を描画 draw.ellipse((x-r, center - r, x+ r, center + r), fill=color_bk) #完成したコマを配列に追記する images.append(im) #時刻を進める t=t+1 #生成完了 print("done") #ファイル書き出し images[0].save('UAM.gif', save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)
「等速直線運動」
from PIL import Image, ImageDraw images = [] #各コマを収める配列を宣言 width = 1000 #画面横幅 height = 300 #画面縦幅 center = height // 2 #縦中心位置 color_bk = (0, 0, 0) #黒色を示すベクトル color_white = (255, 255, 255) #白色を示すベクトル color_gray = (128,128,128) #グレーを示すベクトル r=20 #メイン玉の半径 dotr = 2 #軌跡を表すドットの半径 x=-r #メイン玉の初期位置(左側画面外から開始) t=0 #時刻初期値0 v=18 #速度 dotlist = [] #軌跡点情報を収める配列を宣言 #メイン玉が右画面外にはみ出すまで続ける while x<=(width + r): x = v*t #横位置の算出 print(f't={t},v={v},x={x}') #デバッグ用画面表示 im = Image.new('RGB', (width, height), color_gray) #コマ画像オブジェクト生成 draw = ImageDraw.Draw(im) #時刻が3スロット経過するごとに軌跡を追加する if t % 3 == 0: dotlist.append(x) #軌跡点を描画 for dx in dotlist: draw.ellipse((dx-dotr, center - dotr, dx+ dotr, center + dotr), fill=color_white) #メイン玉を描画 draw.ellipse((x-r, center - r, x+ r, center + r), fill=color_bk) #完成したコマを配列に追記する images.append(im) #時刻を進める t=t+1 #生成完了 print("done") #ファイル書き出し images[0].save('ULM.gif', save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)
現在ご覧のページの最終更新日時は2023/07/13 18:44:50です。
Copyright (C) N.Y.City ALL Rights Reserved.
Email: info[at]nycity.main.jp