Python電卓を使ってみよう 第8回 スクリーンセーバーを作ってみる
2025年4月9日(水)9時25分 マイナビニュース
今回は線の描画を使ってスクリーンセーバー(画面の焼き付き防止)を作ってみます。通常であれば線を描画する機能がありそうなものですが、casioplotモジュールには線を描画する機能がありません。公式マニュアルを見ても線の描画機能だけでなく円などの描画機能もありません。必要なグラフィック機能は自分で作らないといけません。そこで今回は線と円を描画するプログラムを作成します。
○線を描画する
線を描画するにはどうしたらよいのでしょうか。2点間を直線で結べばよいのでy=axの計算式に従って点を表示していくことになります。ここで、横の水平線と縦の垂直線は別途処理してしまいます。これは線の傾きで判断します。その後、横の長さと縦の長さに応じて処理を分けます。
線を描画する際、関数として定義しておくと後々使いやすいものになります。ここではgLineという名前の関数にしてあります。必要なパラメーターは(x1,y1)と(x2,y2)の座標値、そして線の色を示す値(タプル型)になります。
実際のプログラムは以下のようになります。fx-CG50には横255文字×300行までという数制限があるので、あまり長いプログラムにしてしまうと後々満足なプログラムが作れなくなってしまいます。Python言語仕様で行数的には短くすることができますので、興味ある人は改良してみてください。
from casioplot import *
def gLine(x1,y1,x2,y2,col):
x=x1
y=y1
sx=1
sy=1
dx=x2-x1
dy=y2-y1
if dx<0:
sx=-1
if dy<0:
sy=-1
if dx==0:
for i in range(abs(dy)):
set_pixel(int(x),int(y),col)
y=y+sy
return
if dy==0:
for i in range(abs(dx)):
set_pixel(int(x),int(y),col)
x=x+sx
return
if abs(dx)>abs(dy):
d=dy/abs(dx)
for i in range(abs(dx)):
set_pixel(int(x),int(y),col)
x=x+sx
y=y+d
else:
d=dx/abs(dy)
for i in range(abs(dy)):
set_pixel(int(x),int(y),col)
x=x+d
y=y+sy
clear_screen()
gLine(50,50,50,50,(0,0,0))
gLine(0,0,383,0,(0,0,0))
gLine(0,0,0,191,(0,0,0))
gLine(383,0,383,191,(0,0,0))
gLine(0,191,383,191,(0,0,0))
gLine(0,0,383,191,(255,0,0))
gLine(383,0,0,191,(0,255,0))
gLine(200,191,180,0,(0,0,255))
show_screen()
これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はF1.pyとしてあります。実行すると図のようになります。上下左右の端に黒い線が描かれます。そして、対角線と中央付近に色がついた線が表示されます。
次に画面をぐるっと一周した感じで線を描画してみます。線を描画する関数部分は変わりません。forで線の座標を変化させながら描いていますが、間隔1で表示すると画面が塗りつぶされた状態になります。これだと見栄え的に面白くないので間隔を4にしています。これはrange(0,384,4)の4の部分が該当します。range(0,384,4)の指定だと0から383まで4間隔ごとに値が変化します。
from casioplot import *
def gLine(x1,y1,x2,y2,col):
x=x1
y=y1
sx=1
sy=1
dx=x2-x1
dy=y2-y1
if dx<0:
sx=-1
if dy<0:
sy=-1
if dx==0:
for i in range(abs(dy)):
set_pixel(int(x),int(y),col)
y=y+sy
return
if dy==0:
for i in range(abs(dx)):
set_pixel(int(x),int(y),col)
x=x+sx
return
if abs(dx)>abs(dy):
d=dy/abs(dx)
for i in range(abs(dx)):
set_pixel(int(x),int(y),col)
x=x+sx
y=y+d
else:
d=dx/abs(dy)
for i in range(abs(dy)):
set_pixel(int(x),int(y),col)
x=x+d
y=y+sy
clear_screen()
for x in range(0,384,4):
gLine(x,0,384-x,192,(255,0,0))
show_screen()
for y in range(0,192,4):
gLine(0,192-y,384,y,(255,0,0))
show_screen()
これまでと同様にパソコン側でファイルを作成しておき、電卓に転送します。ファイル名はF2.pyとしてあります。実行すると図のようになります。中には大昔(1980年代)、このようなグラフィックを見た人もいるかもしれません。
.