アニメ『弱虫ペダル』
今年は第三期も始まったアニメです。ペダルの回し方とっても大事です。
ではprinterbanner表示を行列を使って回してみます。
banner表示をそのまま反転してしまうと、マイナス座標になってしまいますので、反転したらプラスになるようにxをa分移動させてマイナス値にしておきます。
マイナス値にしたら反転させるために行列の積算を行い、banner文字が端末画面上で表示されるイメージです。
計算式はこのようになります。
\[
\left(
\begin{array}{c}
x’ \\
y’
\end{array}
\right)
=
\left(
\begin{array}{cc}
-1 & 0 \\
0 & 1
\end{array}
\right)
\left( \left(
\begin{array}{c}
x \\
y
\end{array}
\right)
+
\left(
\begin{array}{c}
a \\
0
\end{array}
\right)
\right)
\]
スクリプトです
1 import sys 2 from numpy import * 3 from subprocess import Popen, PIPE 4 5 cmd="printerbanner a" 6 p = Popen(cmd.split(' '), stdout=PIPE, stderr=PIPE) 7 result, err = p.communicate() 8 9 arr = [[0 for x in range(300)] for y in range(300)] 10 11 y=0 12 for line in result.split('\n')[:-2]: 13 x=0 14 for ch in list(line)[30:]: 15 if ch == '#': 16 xy=matrix('%d;%d' %(x,y)) 17 xx,yy=matrix('-1 0;0 1')*(xy-matrix('54;0')) 18 arr[int(yy)][int(xx)]='#' 19 x=x+1 20 y=y+1 21 22 for y in range(43): 23 for x in range(60): 24 ch=arr[y][x] 25 if ch != '#':ch=' ' 26 sys.stdout.write(ch) 27 print 28
実行するとこのようになります。
######## ################ #################### ##### ######################## ########## ########################## ############# ############################ ############## ############################## ############### ######### ######### ############## ######## ######## ###### #### ####### ####### ##### ###### ###### #### ###### ###### #### ###### ###### #### ##### ##### ##### ##### ##### ###### ##### ##### ####### ##### ##### ######### ###### ###### ################################################ ################################################# ################################################# ################################################# ################################################# ############################################### ############################################# ######################################### ###### #### ### ##
次は20°回転させてみます。
\[
\left(
\begin{array}{c}
x’ \\
y’
\end{array}
\right)
=
\left(
\begin{array}{cc}
-1 & 0 \\
0 & 1
\end{array}
\right)
\left( \left(
\begin{array}{c}
x \\
y
\end{array}
\right)
+
\left(
\begin{array}{c}
a \\
0
\end{array}
\right)
\right)
\]
スクリプトです。
1 import sys 2 from numpy import * 3 from math import * 4 from subprocess import Popen, PIPE 5 6 cmd="printerbanner a" 7 p = Popen(cmd.split(' '), stdout=PIPE, stderr=PIPE) 8 result, err = p.communicate() 9 10 arr = [[0 for x in range(300)] for y in range(300)] 11 12 r=-pi*20/180 13 y=0 14 for line in result.split('\n')[:-2]: 15 x=0 16 for ch in list(line)[30:]: 17 if ch == '#': 18 xy=matrix('%d;%d' %(x,y)) 19 xx,yy=matrix(((cos(r),-sin(r)),(sin(r),cos(r))))*(xy-matrix('0;31'))+matrix('8;42') 20 arr[int(yy)][int(xx)]='#' 21 x=x+1 22 y=y+1 23 24 for y in range(43): 25 for x in range(60): 26 ch=arr[y][x] 27 if ch != '#':ch=' ' 28 sys.stdout.write(ch) 29 print 30
###### ## ## ########## ############# ####### ######## ## ## ########### # ####### ## ## ########## ####### #### ######## ## #### # # #### ##### ## ########### #### ################ ## # ##### ######################## ##### ######### ## ############ ## ### ##### ## ###### #### #### ##### ############ ###### ######## ########## #### # ######## ######## # #### ## ###### ### ##### #### ########### ###### #### ########### ### ###### # ## ######## ####### # ##### #### ###### ########### ###### ###### ############## # ###### # ############## ## ### # ## ## ############## ####### ###### ######### ############## ###### # ###### ## ############## ####### # ## ## ############## ## ####### ################ ## ### ## ################ ###### ######### ## ######## ##### ## ########### ## ############## ########### ### ####### ##### ## ######## ####### #### # ##### #### ### # # #
コメント