Casio Python - circle() 関数のFXモデルへの拡張

Python Casio Python
 Casioグラフ関数電卓の Python を使ってみる
     - circle()関数のFXモデルへの拡張 
目次


初版:2020/11/07


前の記事 - 15. RGBによる色指定 |  次の記事 -  17. shell 画面とグラフィック画面の活用:コラッツ問題


16. circle()関数のFXモデルへの拡張

<fx-CG50 OS3.40以降、fx-9750GIII, fx-9860GIII OS3.40ニ以降に対応>

ユーザーモジュールとして作成した u.py ver 1.4 は、CGモデル (fx-CG50) 専用でした。その中に円を描画する circle() 関数があります。

CGモデル用 モノクロの円描画関数 circle() の作成 ⇒ こちらを参照
CGモデル用に circle() をカラー対応 ⇒ こちらを参照

 u.py ver 1.4 の circle() の関数定義:
def circle(xyr, color=1, show=1):
 rgb = grp_color(color)
 r*6.283
 2*pi/p
 for i in range(p):
  px r*cos(i*a)
  if px<0 or px>383: #CGモデル特有のスクリプト
   continue
  py r*
sin(i*a)
  if py<0 or py>191: #CGモデル特有のスクリプト
   continue 
  set_pixel(int(px)int(py), rgb)
  if show:
   show_screen()

このスクリプトには、上で示したように CGモデル特有のスクリプト が2箇所含まれています。この2箇所は、設定した座標が画面の範囲外の場合に描画をしないようにしている部分です。これは描画の高速化を目的としています。

CGモデルの液晶画面は 384 x 192 ピクセルありますが、FXモデルは 128 x 64 ピクセルしかありません。そこで上記をFXモデルに対応すれば、circle() 関数が FXモデル対応になります。

但し、CGモデル用とFXモデル用の2つの関数を使い分けるのは、ユーザーからみて面倒なので、1つの関数で CGモデルかFXモデルかの判定を行い、判定結果に応じてCGモデル用とFXモデル用のに場合分けすることで、両方に対応させると良いでしょう。

ここでは、既に作った CGモデルかFXモデルかを判定するユーザー関数を使います。
CGモデルかFXモデルを判定するユーザー関数 - isCG() を参照


16.1 CGモデルとFXモデルの場合分け
上記の CGモデル特有のスクリプトでは、CGモデルの画面において、ピクセルの座標の x と y の最大値を使っています。
x座標の最大値(CGモデル): 383
y座標の最大値(CGモデル): 191

FXモデルでのピクセルの x座標とy座標の最大値は、以下になります。
x座標の最大値(FXモデル): 127
y座標の最大値(FXモデル): 63

そこで、x座標の最大値の変数を px_max、y座標の最大値の変数を py_max として、CGモデルかFXモデルかの判定結果に応じて、px_maxpy_max に上記のいずれかの値を代入して使うようにします。

ユーザー関数 isCG() は、CGモデルでは 1 を、FXモデルでは 0 を返します。そこで、px_maxpy_max を以下のように決めます。

 if isCG():
  px_max = 383
  py_max = 191
 else:
  px_max = 127
  py_max = 63


そして、383px_max に、191py_max に置き換えます。


CGモデル、FXモデル共用の circle() 関数
def circle(x, y, r, color=1, show=1):
 rgb = grp_color(color)
 if isCG():
  px_max = 383
  py_max = 191
 else:
  px_max = 127
  py_max = 63
 rgb = grp_color(color)
 p = r*6.283 #number of plots
 a = 2*pi/p #angle step in radian
 for i in range(p):
  px = x + r*cos(i*a)
  if px<0 or px>px_max:
   continue
  py = y + r*sin(i*a)
  if py<0 or py>py_max:
   continue
  set_pixel(int(px), int(py), rgb)
  if show: #data transfer to screen
   show_screen()
これで完成です。他は変更する必要が無いと思います。
ユーザーモジュール u.py ver 1.5 にはここで作った circle() 関数を含んでいます。


16.2 circle() 関数を使ってみる

 書式:
circle(x, y, r, color=1, show=1)

第1~第3引数は浮動小数点、位置パラメータで、設定しないとエラーになります。
第4引数 color は、パラメータ引数で、省略可能でデフォルトは 1 です。
color の設定は grp_color() のリファレンスを参照してください。
第5引数 show は、パラメータ引数で、省略可能でデフォルトは 1 です。
引数を4つ、値だけを指定するとエラーになります ⇒ 関数の引数は こちら を参照。
引数を4つだけ設定する場合は、パラメータと共に設定します。
  例) circle(100, 50, 30, color=4) / circle(100, 50, 30, show=0)

CGモデルの場合 - circleCG.py


from u import *
px = 290
py = 96
r = 91
circle(px, py, r, color=3, show=0)
circle(px, py, r/2, 2)

circle_CG 


FXモデルの場合 - circleFX.py

CGモデルの画面は 384 x 192 ピクセル、一方 FXモデルは 128 x 64 ピクセルで、CGモデルのちょうど 1/3 です。つまり CGモデルで設定する座標値や長さを 1/3 にすれば FXモデルに適用できます。

from u import *
px = 290/3
py = 96/3
r = 91/3

circle(px, py, r, color=3, show=0)
circle(px, py, r, r/2, 2)


circle_FX 


CGモデルとFXモデル共用の場合 - circle.py

from u import *
if isCG():
 px=290
 py=96
 r=91

else:
 px=290/3
 py=96/3
 r=91/2

circle(px, py, r, color=3, show=0)
circle(px, py, r, r/2, 2)


CGモデルとFXモデルを判別する isCG() を使い、円の中心座標 (px, py) と半径 r を場合分けした上で、円を描画します。

circle_CG circle_FX 


目 次

前の記事 - 15. RGBによる色指定

次の記事 - 17. shell 画面とグラフィック画面の活用:コラッツ問題





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-CG50Pythonfx-9750GIIIfx-9860GIIIプログラム関数電卓

リンク集 | ブログ内マップ


関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic や Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR