楽屋裏 - fx-CG50 ついに国内発売

楽 屋 裏
e-Gadget


2017/09/26
追記 2017/09/29


fx-CG50 が 2017年10月20日に国内発売!!

fx-CG50fx-CG50 (カシオ国内サイト)

カラーグラフ関数電卓 fx-CG50

ニュースリリース - 立体図形を簡単に描画・解析できるカラーグラフ関数電卓 [2017/09/29 追記]


 PRIZM fx-CG10 がアメリカで発売されてから 国内で fx-CG20 が発売されるまで1年近くかかったのに対して、fx-CG50 は約半年で国内発売になりました。

fx-CG50 の概要 で触れているように、fx-9860GII の真の後継機種と言えるだけの性能になっており(特に画面表示速度向上)、新しいカシオのデザイン (fx-JP900 とほぼ同じ) です。


OS は Ver 3.10

国内発売は、OS 3.10 にバージョンアップしたものになると思われます。

なお、既に fx-CG50 の日本語版取扱説明書がカシオ日本語サイトの取扱説明書ダウンロードサイトからダウンロードできるようになっています。ハードウェアマニュアルとソフトウェアマニュアルの両方の日本語マニュアルです。ソフトウェアマニュアルが OS Ver 3.10 用になっています。現行は Ver 3.00 です。

なお、ソフトウェアマニュアルを見ると fx-CG20 も Ver 3.10 にアップデートされることが分かります。


付属品
  • 単四形アルカリ電池4本
  • ハードケース
  • USBケーブル
  • 3ピンケーブル (SB-62)
  • クイックスタートガイド
海外のパッケージには含まれていない 3ピンケーブルが、国内販売パッケージには含まれるようで、既にグラフ関数電卓を持っている人には、違う機種同士のデータリンクもできるので、ポイント高いと思います。fx-5800P 同士のデータリンクにも使えるので fx-5800P を2台以上持ってバックアップするのにも役立ちます。


実売価格

実売価格がどの程度になるのか気になります。


カタログ

fx-CG50 国内投入に併せて、fx-CG50 のリーフレットが追加されました。

PDFカタログ | 電卓 | CASIO


fx-CG50 OS 3.10 へのアップデートファイル公開

既に個人輸入や海外で調達して fx-CG50 (OS 3.00) を持っている場合は、Casio World Education Website からOS 3.1 へのアップデートファイル が公開されているので、スグに アップデートできます。


fx-CG50 の概要

その後のOSアップデートや新機能追加を含めて、ハードウェアやソフトウェアを調べた結果を Casio fx-CG50の概要 にまとめています。





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


 


keywords: プログラム関数電卓、fx-CG50、クロックアップ、Ptune3

リンク集 | ブログ内マップ
関連記事

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

Casio Basic で作る "お気に入りプログラムリスト"

2017/09/01
追記・修正 2017/09/02
追記 2017/09/28

[2017/09/02] プログラムアップデート、fx-9860GII 用プログラム追加.


fx-CG50 を入手し、今は fx-5800P と共に日常使いにしていますが、fx-5800P に比べて fx-CG50 の使いにくい点を工夫してみたので紹介します。

fx-5800P ではプログラムをお気に入り登録しておけます。そして [FILE] キーを押せばお気に入りプログラムリストが表示され、そこからプログラムを起動できます。この機能が 通常の電卓モード (COMPモード)で使えるところに大きなメリットがあります。
Keys-2  

fx-5800P の便利な [FILE] キーが、残念なことに fx-CG50 や fx-CG20 や fx-9860GII などのグラフ関数電卓にはなく、とても不便に感じます。そこで、お気に入りプログラムを素早く起動するためのメニュープログラムをCasio Basicで作り、プログラムリストのトップに来るようにする...という作戦でプログラムを 2種類 作ってみました。

今回は fx-CG50 で作りましたが、fx-CG20 でもそのまま使えます。


プログラム例1

Menu1

 MENU コマンドを使ってみました。プログラム例2に比べて記述量が少ないので入力は相対的に楽です。但しメニューを終了するには [AC] キーを押すか、メニューを終了させるためのメニュー項目を作る必要があります。1画面のメニュー項目は6個、7個以上はスクロールさせて選択できる機能が自動的に追加されます。7項目に メニュー名 "Exit" を追加し、Return コマンドを実行させてプログラムが終了するようにしていますが、矢印キーを押してスクロールする一手間が必要になります (プログラム例2は、[EXIT] キーを押すだけでメニュー終了できる)。
なお、呼び出すプログラムは Quotation 以外のプログラムは、プログラムライブラリに収録してます。

プログラム名を '~MENU としました。頭に ' を付けるとプログラムリストの1番上に来ます。
Menu1_ProgList 

プログラムリストが表示されている時、[EXIT] キーを押せば、リストの最初が表示されます。
fx-CG50 の電源を入れ、[MENU] [log] (B) [EXIT] [EXE] とキーをチャッチャと押せばメニューが表示されるので、かなり便利になります。

プログラムダウンロード: MENU_1.zip

プログラムソース: '~MENU.g3m
Menu_1_CG50_src  


プログラム例2

Menu2
 

MENUコマンドを使わず、テンキーでメニュー番号を押してメニュー選択します。項目が6個の場合は、メニュー終了に [EXIT] キーを割り当てられ、画面スクロール無しに1手間で終了できます。なお、Quotation 以外の呼び出すプログラムプログラムライブラリに収録しています。

プログラム名を 'MENU としました。頭に ' を付けるとプログラムリストの1番上に来ます。
Menu2_ProgList 

プログラムリストが表示されている時 [EXIT] キーを押せばリストの最初が表示されます。
fx-CG50 の電源を入れ、[MENU] [log] (B) [EXIT] [EXE] とキーをチャッチャと押せばメニューが起動するので、かなり便利になります。

 プログラムダウンロード: MENU_2.zip [2017/09/02 修正]

プログラムソース: 'MENU.g3m [2017/09/02 修正]
Menu_2_CG50_src    


呼び出すプログラム

fx-9860GII シリーズへの移植

MENU コマンドを使ったプログラム例1は、そのまま fx-9860GII シリーズで動作します。プログラム例2は、カラー設定のコマンドを削除するだけで fx-9860GII シリーズで動作します。

fx-9860GIII へ移植するには、以下の方法があります;[2017/09/02 追記]
  • 3Pin ケーブル (SB-62) で fx-CG50/20 とfx-9860GII シリーズを接続しプログラムを転送する。ファイル形式が g3m から g1m へ自動的に変換される。カラー設定コマンドは自動的に @ に変換されるので、転送後に @ を削除すれば正常動作する。
  • 手入力する。カラー設定コードは使わない。
※ 最近は グラフ関数電卓に 3Pin ケーブル (SB-62) は付属していません (以前は付属していたので残念です)。私が購入した時は ¥2,700 でした。

fx-9860GII シリーズ用プログラムファイルのダウンロード [2017/09/02 追記]
プログラム例1 '~MENU.g1m (fx-9860GII 用): MENU_9860_1.zip
プログラム例2  'MENU.g1m (fx-9860GII 用):MENU_9860_2.zip

Menu_9860_1 Menu_9860_2 


私の運用例

使用頻度の高いプログラムは 'MENU (例2)から呼び出せるようにし、頻度は低いが必要な時にサッと起動したいものは '~MENUに登録し、両方を併用しています。Program List の一番上に 'MENU がその下に ’~MENU があるので便利に運用しています。




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


 


keywords: プログラム関数電卓、fx-CG50、クロックアップ、Ptune3

リンク集 | ブログ内マップ
関連記事

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

Casio Basic入門G05

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2015/07/25 追記
2017/09/25 追記



 5. Casio Basic でグラフィックス


前回: Casio Basic入門G04


Chapter G05
Plot と ViewWindow

前回は、Plot コマンドについて、色々と調べましたが、論理座標系での動作しか確認していません。

今回は、Plot コマンドのカーソル表示座標は、ViewWindow座標系を反映するのか?という疑問について調べて見ました。

なお、fx-9860GII の取扱説明書(fx-9860GII_Soft_J_2.04.pdf)の 8-24 ページには、

Plot <X座標値>,<Y座標値>

と記載があるだけなので、前回同様、実際にプログラムを作りながら細かい点を確認してゆきます。



最初に、以下のプログラム VW.PLOT1 を作ります。

ファイル名: VW.PLOT1
ClrGraph
CoordOn
GridOff
AxesOn
LabelOff

Plot 6,3◢
Text 1,1,"x=  " (スペース4個)
Text 1,35,"y=   " (スペース5個)
Text 1,10,X
Text 1,45,Y◢

ViewWindow -10,116,10,-10,52,10
Plot 6,3◢
Text 1,1,"x=  " (スペース4個)
Text 1,35,"y=   " (スペース5個)
Text 1,10,X
Text 1,45,Y


⇒ ダウンロード: VW.PLOT1

プログラム冒頭で、ClrGraph を実行しているので、ここで自動的にデフォルトの論理座標系になっています(ClrGraph の仕様)。
そして、Plot 6,3◢ で、座標 (6, 3) にカーソルを表示します。ここで [EXE] を押せば、この位置に点が描画されるはずです。
そして、描画された点の位置を示す X座標値とY座標値は、それぞれ変数 XY に自動的に代入されます。
従って、続く Text コマンドで各座標値が表示され、そこで出力命令 によりプログラムは一旦停止します。

ここまでは、前回見てきた内容です。続いて今回のテーマである座標系変更に伴う Plot コマンドの動作を確認するためのコードを書きます。

上で赤文字で示したような ViewWindow座標系を設定し、続いて Plot 6,3◢ を実行します。
ここで、[EXE] を押せば、カーソル位置に点が描画されます。その後、同様に Text コマンドで、描画された点の座標値 XY を表示します。

以上が、プログラムの内容です。実際に起動してみます。

VW.PLOT1-1 

CoordOn によりカーソルの座標値が最下行に表示されていて、確かに、カーソルが座標 (6, 3) に表示されていることが確認できます。

ここで、[EXE] を押すと、

VW/PLOT1-2 

座標 (6, 3) に点の描画が確認できます。さらに、点が描画されると、十字カーソルが消えて、それに連動して座標値の表示も消えます。

CoordOn はカーソルの位置を示すのであって、描画された点の座標値を示さないことが、併せて確認できます。十字カーソルとカーソル位置の座標値表示は、Plot コマンドを一旦停止した時だけ現れるということです。

さて、この状態では Text 1,45,Y◢ のところでプログラムが一旦停止しています。そこで [EXE] を押して一旦停止を解除します。

すると、ViewWindow の設定が実行されて、座標系が変更され、その上で、Plot 6,3◢ が実行された結果が表示されます。

VW,PLOT1-3 

十字カーソルが再び表示され、最下行にカーソル位置の座標値も表示され、カーソル位置が (6, 3) になっていますね。つまり、Plot コマンドで表示されるカーソル位置は、設定したViewWindow座標系に従うことが、確認できました。

ここで、もう一つ Plot コマンドの特徴が分かります。ViewWindow を実行すると、それまで描画されていたグラフィックスが消去されるはずですが、Plot で描画した点は、消去されていないのです。右上の点が消えずに残っています

今この状態では、Plot 6,3◢ によりプログラムが一旦停止しているので、[EXE] を押して、一旦停止を解除すると、

WV.PLOT1-4 

カーソル位置に点が描画され、同時にカーソルが消えて最下行にある CordOn による座標値の表示も消えました。そして、Text コマンドにより、今描画された点の座標値が表示されました。Plot コマンドによる2つの点が表示されています。

[AC] を2回押してプログラムを終了します。

==========

では、もう一度プログラム VW.PLOT1 を起動してみます。今度は、カーソルを移動させてから [EXE] を押してみます。

プログラムを起動すると、

VW.PLOT1-1 

カーソルを移動させると、最下行にある CordOn により表示される座標値が、リアルタイムに変化します。

VW.PLOT1-5 

そして、[EXE] を押すと、

VW.PLOT1-6 

カーソルと最下行の座標値表示が消え、Text コマンドによる点の座標値が表示されます。

[EXE] で一旦停止を解除すると、

W.PLOT1-7 

新しい座標系が設定され、再びカーソルと最下行の座標値表示が復活し、座標 (6, 3) にカーソルがあることが分かります。そして、右上の Plot により描画された点は、やはり残っています。

カーソルを適当に移動し、

VW.PLOT1-8 

ここで、[EXE] を押すと、カーソルと最下行の座標値表示が消え、Text コマンドにより点の座標が表示されました。そして、2つの点も表示されます。

Plot コマンドで描画した点は、ViewWindow では消去されないことが再確認できました。



Plot コマンドで描画された点と ViewWindow によるグラフィックス描画の消去について、もう少し詳しく調べてみます。具体的には、ViewWindow 設定を次々と変更しながら、その都度 Plot コマンドでカーソルを表示し [EXE] で点を描画させてみます。

そこで、以下のプログラム VW.PLOT2 を入力してください。

ファイル名: VW.PLOT2
ClrGraph
CoordOn
GridOff
AxesOn
LabelOff

For 5→I To 20
ViewWindow -2I,40-2I,2,-I,20-I,2
Plot -2,-2◢
Next


⇒ ダウンロード: VW.PLOT2

このように、ViewWindow は、変数を用いて設定することもできます。
このプログラムでは、For 文を用いて、座標系の原点を左下から右上まで徐々に変更しながら、常に座標 (-2, -2)Plot でカーソル表示+[EXE] で、点描画を繰り返します。

Casio Basic コマンドリファレンス - For 文

プログラムを起動し、[EXE] キーを何回か押してゆくと、画面表示が変化してゆきます。



動画を見れば分かるように、この For 文では、ViewWindow 座標系の横幅を 41、縦幅を 21 に固定、原点の位置だけを変更して、それぞれで Plot -2,-2◢ を実行していることになります。


Plot で描画された点は、直前の描画は残りますが、それ以前の描画は消去されていることが分かりますね。おそらく、Plot と連動して使う Line コマンドを活かして互換性を保つために、このような仕様になっていると想像しています。但し、ViewWindow を実行すると Line で描画した直線は消去されます。

試しに、上のプログラムに Line コマンドを追加して実行してみると分かります。

ClrGraph
CoordOn
GridOff
AxesOn
LabelOff

For 5→I To 20
ViewWindow -2I,40-2I,2,-I,20-I,2
Plot -2,-2◢
Line
Next


一瞬直線が表示されてスグに消去されますが、最後の直線は残ります。



さて、VW.PLOT2 を実行してみて、1つ気になることがあります。

Plot -2,-2◢ では、整数値を指定しているのに、CoordOn で最下行に表示される座標値が小数値になっています。



ViewWindow座標系で描画される点が、物理的なピクセル位置に完全に対応せず、四捨五入計算で最も近いピクセルを On にし、そのピクセル位置から逆算して座標値を求めているのが原因だと考えられます。

グラフを描画するのではなくて、単にグラフィックス表示を行うプログラムでは、このあたりの計算による誤差が問題になることが実際に発生します。これについては、次回以降で具体的に検証する予定です。

物理的なピクセルは、Casio Basic でプログラムを作る限りは、横 127 ピクセル、縦 63 ピクセルの表示エリアを使う(Casio Basic入門G01参照)ので、ViewWindow 座標系の指定では、この数に合うように設定すれば、座標の設定値と読取値は、整数のまま一致するはずです。

そこで、今回は妙な小数にならないように、物理的なピクセル数に合わせた ViewWindow 設定を試してみます。

プログラム VW.PLOT2 を以下のような ViewWindow 設定に書き換えてみます。

ファイル名: VW.PLOT3
ClrGraph
CoordOn
GridOff
AxesOn
LabelOff

For 20→I To 62 Step 3
ViewWindow -2I,126-2I,10,-I,62-I,10
Plot -10,-10◢
Next


⇒ ダウンロード: VW.PLOT3

これを実行してみると、



この動画からスグに分かると思いますが、ViewWindow 座標系の横幅を 127、縦幅を 63 に固定して、原点だけを移動させていることになります。今度は座標値の表示が設定値と全く同じ (-10, -10) と、正しく整数になっていますね。


以上で、PlotViewWindow の関係が詳しく分かりました。



ところで、プログラム VW.PLOT2 や VW.PLOT3 のように、ViewWindow 設定を切り替えるようなプログラムでは、ViewWindow 設定の保存と読出機能が便利になることがあります。

ViewWindow 設定は、StoV-Win コマンドで 6通り保存することができ、RclV-Win コマンドでそれを呼びだすことができます。

StoV-Win コマンド

・書式StoV-Win <番号>
  • <番号> は、1 から 6 の整数、合計 6 通りを保存できる。
  • 現在の ViewWindow 設定を保存する。
  • <番号> には、数値と変数が使える。
  • <番号> が 7 以上の時は、Argument ERROR (引数エラー) となる。
  • メインメモリの空容量が足りない時は、実行時にエラーとなり、保存できる数が 6 未満のこともある。設定1つで 152 バイト使います。
・入力方法[SHIFT] [F3] (V-Window) [F2] (Sto)


RclV-Win コマンド

・書式RclV-Win <番号>
  • <番号> は、1 から 6 の整数。StoV-Win で設定した番号を指定する。
  • 保存された ViewWindow 設定を呼び出して有効にする。
  • <番号> には、数値と変数が使える。
  • <番号> が 7 以上の時は、Argument ERROR (引数エラー) となる。
入力方法[SHIFT] [F3] (V-Window) [F3] (Rcl)


プログラム VW.PLOT3StoV-Win / RclV-Win を使って書き換えてみます。但し保存できる数が最大 7 なので、For 文のステップ数を増やして、保存する数を 7 以下にする必要があります。

ファイル名: VW.PLOT4
ClrGraph
CoordOn
GridOff
AxesOn
LabelOff

1→V
For 27→I To 62 Step 7
ViewWindow -2I,126-2I,10,-I,62-I,10
StoV-Win V
Isz V
Next

V-1→W
For 1→V To W
RclV-Win V
Test 1,1,V
Plot -2,-2◢
Next


⇒ ダウンロード: VW.PLOT4

ClirGraph
に続くグラフ設定を行い、続いて 複数の ViewWindow 設定を StoV-Win V (変数 V は 1 から始まり、1つづつ増やす) で次々と保存しています。結果的に 6 通り保存しています。
引き続き、保存した ViewWindow 設定を RclV-Win V (変数 V は 1 から始まり、1つづつ増やす) で呼び出し、それぞれで Plot -2,-2◢ を実行します。[EXE] を何回か押してゆきます。



ここで、StoV-WinRclV-Win のパラメータに変数 XY を使うと、プログラムは誤動作します。試しに、上のプログラムで、V の代わりに X を、W の代わりに Y に変更して、実行してみてください。エラーになります。

誤動作の理由は分かりますか?

Plot コマンドでカーソル表示の際に、[EXE] を押すと、カーソルの座標値が自動的に 変数 XY に代入される仕様です。つまり、変数 Y には予期せぬ値が入ってしまうのが誤動作原因です。Plot の仕様を理解していないと、バグに悩むことになりますね。

なお、直接 ViewWindow で座標系を設定せず、RclV-Win で設定しても、Plot -2,-2◢ で描画された最後の点は、消去されません。RclV-Win の動作は、ViewWindow による直接設定と同じだと分かります。



ViewWindow の保存と呼び出し機能を使ったので、次にグラフィックス画面全体の保存と呼び出し機能を試してみます。グラフィックス画面全体を保存するには StoPict コマンド、呼び出して描画するのは RclPict コマンドを使います。

StoPict コマンド

・書式StoPict <番号>
  • <番号> は 1 から 20 の整数、合計 20 通保存できる。
  • 現在のグラフィックス画面全体を保存する。
  • <番号> には、数値と変数が使える。
  • <番号> が 21 以上の時、Argument ERROR (引数エラー) となる。
  • メインメモリの空容量が足りない場合は、実行時にエラーになり、保存できる数が 20 未満のこともある。設定1つに 2068 バイト使います。
・入力方法[OPTN] [F6] (▷) [F6] (▷) [F2] (PICT) [F1] (Sto)


RclPict コマンド

・書式RclPict <番号>
  • <番号> は 1 から 20 の整数、StoPict で設定した番号を指定する。
  • <番号> には、数値と変数が使える。
  • 保存されたグラフィックス画面を呼びだして表示する。
  • <番号> が 21 以上の場合は、Argument ERROR (引数エラー) になる。
・入力方法: [OPTN] [F6] (▷) [F6] (▷) [F2] (PICT) [F2] (Rcl)


プログラム VW.PLOT3 の描画を一旦保存しておき、あとでそれを呼び出して表示するプログラムを作ってみます。

ファイル名: VW.PLOT5
ClrGraph
CoordOn
GridOff
AxesOn
LabelOff

1→P
For 20→I To 62 Step 3
ViewWindow -2I,126-2I,10,-I,62-I,10
Plot -10,-10
StoPict P
Isz P
Next

AxesOff
P-1→Q
For 1→P To Q
ClrGraph
F-Line -6.3,-3.1,6.3,3.1
RclPict P◢
Next


⇒ ダウンロード: VW.PLOT5

VW.PLOT3
に追加した部分を赤文字で示しています。なお、Plot -10,-10 の後の は外しています。

ClrGraph でグラフィックス画面を消去し、種々のグラフ設定を行った後、SotPict <番号><番号> に使う変数 P を 1 で初期化し、Plot -10,10 により描画した点、表示された座標軸ごとグラフィックス画面として、StoPict P で保存します。 P は、1, 2, 3, ... です。

その後、AxesOff で座標軸表示を Off にした上で、保存したグラフィックス画面を、順次 RclPict P で呼出して表示しています。座標軸表示を Off にしたのは、座標軸も保存され、呼出されるのかどうかを確かめる目的です。また、RclPict の前に ClrGraph と F-Line を実行しています。ClirGraph により論理座標系が設定され、同時にメモリ間隔が 1 に設定される影響も確かめられます。さらに、F-Line で左下から右飢えへ直線を描画していますが、この直線が RclPict でどのように影響されるのかも確かめます。



結果として、StoPictRclPict は、グラフィックス画面に表示されている内容を、丸ごと保存し、呼出することが分かりました。そして、RclPict は、グラフィックス画面に上書きするのではなくて、既にあるグラフィックス描画に重ね合わせて表示することも分かりました。

RclPict
コマンドは、グラフィックス画面全体のデータを一度にLCD転送するので描画が速いのが最大の利点です。20個の画面データを扱えるので、プログラミングでの利用価値はあると思います。詳しくは次回以降取り上げようと思います。

[2015/07/25 追記]
StoPict / RclPict は、fx-CG20 / 10 でも今回のCasio Basic プログラムは100% で動作するのこと。但し、fx-9860GII に比べて描画がかなり遅いという情報を頂きました。保存先のメモリが、fx-9860GII は RAMであるのに対して、fx-CG20 / 10 では、フラッシュメモリ(保存メモリ)なのが原因だそうです。




今回のまとめ
  • Plot は、ViewWindow 座標系の設定に従って動作する。
  • CoordOn 設定時に Plot でカーソルが表示されている時、[EXE] で点描画を行うと、カーソルと 座標値の表示が消える。
  • CoordOn により表示される座標値は、カーソル位置を示すもの。
  • Viewwindow で座標系を設定する際、グラフィックス描画は消去されるが、例外的に Plot で直前に描画した点 のみが消去されずに残る。
  • CorrdOn で表示される座標値は、Plot X,Y で指定される座標(X, Y) を示すのではなく、実際に表示されるピクセル位置を、座標系から換算された位置を示すため、計算された結果となるから、Plot X,Y で整数値を指定しても表示される座標値が小数になることがある。
  • 座標系を StoV-Win で保存し、RclV-Win で呼び出す場合は、ViewWinidow 設定と全く同じ動作をする。
  • StoV-Win / RclV-Win で指定する番号は、整数を格納した変数でも良い。
  • StoPict / RclPict で保存 / 呼出しされるグラフィックス画像は、座標設定を含めて画面に表示される全てを扱う。
  • RclPict でグラフィックス画像を呼び出す場合、既にあるグラフィックス描画に上書き表示せずに、元のグラフィックスを消さずに重ねて表示する。
  • RclPict は画面全体のデータを LCD転送するので、描画が速い。但し fx-CG20 / 10 では保存メモリ(フラッシュメモリ)を使うため非常に遅くなる。

今回使ったグラフィックス コマンド
  • Plot
  • ViewWindow
  • Text
  • StoV-Win / RclV-Win
  • StoPPict / RclPict
  • F-Line




つづく...

Casio Basic入門 G06 / 目次



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


 



keywords: fx-9860GIICasioBasic、プログラミング入門グラフィックスプログラム関数電卓

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


関連記事

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

Casio Basic入門G03

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

修正 2015/07/30
修正 2017/09/25



 5. Casio Basic でグラフィックス


前回: Casio Basic入門G02


Chapter G03
ClrGraphViewWindow

今回は、グラフィックス画面を消去する ClrGraph コマンドと 座標系を設定する ViewWindow について調べて見ます。



ClrGraph の詳細動作

最初に、ClrGraph の機能を確認するため、次の2つのプログラムで実験します。

ファイル名:CLRGRPH1
ViewWindow -10,30,2,-5,15,2
CoordOff
GridOff
AxesOn
LabelOff
PlotOn 2,2



ファイル名:CLRGRPH2
ClrGraph
PlotOn 2,2



CLRGRPH1 は、ViewWindow 座標系を指定し、グラフ設定は AxesOn で座標軸表示を On にする以外は全て Off にし、最後に 座標 (2, 2) に点を描画します。

ClrGraph-5 

座標系とグラフ設定は、指定された通りで、座標 (2, 2) に点が描画されています。

この座標系設定とグラフ設定は保存されていて、グラフィックス画面もこの状態で保存されているはずです。そこで、続いて CLRGRPH2 を実行すると、ClrGraph が実行され、再び座標 (2, 2) に点を描画するはずです。実行画面は以下のようになりました。

ClrGraph-6 

ClrGraph コマンドは、グラフィックス画面を消去するだけでなく、座標系をデフォルトの論理座標系に変更することが確認できました。

さらによく見てみると、目盛間隔が指定通りになっていません。
1つめのプログラム CLRGRPH1 で目盛間隔を 2 に指定しているのに、CLRGRPH2 を実行した結果、目盛間隔(スケール)が 1 に変更されています。つまり、ClrGraph は目盛間隔(スケール)も変更することが分かりました。


ここで、消去や設定について、まとめます。

コマンドの機能 - グラフィックス画面の消去と座標系の設定について
コマンド描画の消去座標系グラフ設定
ViewWindow消去する※1)再設定現状設定を維持
ClrGraph消去する論理座標系に変更※2)
現状設定を維持
Cls消去する現状設定を維持現状設定を維持
※1) 例外的に、ViewWindow 実行の直前にPlot コマンドで描画した点については、適用されない。
※2) ClrGraph は、論理座標系に変更し、さらにスケールを 1 に設定する。

ViewWindow
このコマンドで座標系を設定すると、グラフィックス画面は、クリア(消去)されます。但し1つだけ例外として、Plot コマンドでクリア直前に描画された点には適用されません [2017/09/25 追記修正]Plot コマンドは特殊で面白いコマンドなので、後で別に取り上げます。
ViewWindow 設定は、このコマンドで明示的に設定するか、あるいは ClrGraph を実行する以外は、設定は保存され、グラフィックス画面に反映されます。

ClrGraph
グラフィックス画面をクリア(消去)するだけでなく、座標系を論理座標系に設定、スケールを1に設定します。

Cls
グラフィックス画面をクリア(消去)します [2015/7/30 修正]。座標系は現在の設定が維持されます。
CLRGRPH2ClrGraphCls に置き換えて実験してみると、確認できます。

グラフ 設定コマンド
4種類の設定の On /Off を行うもので、これら4つのコマンドの設定内容は、ViewWindow, ClrGraph, Cls の影響を受けません。
1) CoordOn / CoordOff : カーソル位置の座標値出力を On / Off する、Plot コマンドを使う時のみ意味があります。
2) GridOn / GridOff : グリッドの表示を On / Off する
3) AxesOn / AxesOff : 座標軸の表示を On / Off する
4) LabelOn / LabelOff : 座標軸の X、Y ラベル表示を On / Off する



グラフィックス画面とテキスト画面の切り替え

以下のプログラムを実行してみます。

ファイル名: PLOT1.1
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

PlotOn 1,0



グラフィックス画面を消去し、論理座標系が設定され、座標値表示 / グリッド表示 / 座標軸表示 / 軸ラベル表示 を全て Off にした上で、PlotOn コマンドで、(x, y) = (1, 0) に点を描画します。

グラフィックスコマンド PlotOn が実行されると、グラフィックス画面に点を1つ描画します。

Plot-1-1-1 

この表示のままプログラムが終了します。

ここで、[EXE] [EXIT] [AC] のいずれかのキーを押すと、画面右上に Done と表示されます。

Plot1-1-2 

さらに [EXE] [EXIT] [AC] のいずれかのキーを押すと、Program List へ戻ります。

Plot-1-1-3 

もう一度、このプログラムを起動します。

Plot-1-1-1 
そして、点が1つ描画されているグラフィックス画面が表示されている時、[SHIFT] [F6] (G↔T) を押してください。これは、グラフィックス画面とテキスト画面の表示を切り替える操作です。1回押せばテキスト画面 (Done と表示) になり、もう一度このキー操作を行うと、グラフィックス画面に戻ります。

Plot1-1-2 
Done と表示されているのは、テキスト画面であることが分かります。

そして、グラフィックス画面を表示してプログラムが終了した場合、Program List へ戻るには、テキスト画面へ一旦遷移することも分かります。fx-9860GII OS 2.04 ~ OS 2.09 では、このような仕様になっているようです。

==========

それでは、次のプログラムを実行してみます。

ファイル名: PLOT1.2
CllrGraph
CoordOff
GridOff
AxesOff
LabelOff

PlotOn 1,0
Locate 1,1,"Text"



このプログラムを起動すると、Locate 1,1,"Text" の結果として、画面左上に Text と表示しますが、PlotOn 1,0 の結果は表示されていません。

Plot1-2 
プログラムの最後に、テキスト画面に表示するコマンドが実行されたので、自動的にグラフィックス画面からテキスト画面に切り替わっていることが分かります。これで正常なのでしょう。

ここで、[SHIFT] [F6] (G↔T) を押すと、グラフィックス画面に切り替わり、点が描画されていることが確認できます。
Plot-1-1-1 

グラフィックス画面への描画は行われたが、裏に回って表示されないということです。

==========

グラフィックス画面には、Locate コマンドや出力命令 " " で出力ができません。fx-9860GII OC2.04 ~ OS 2.09 の Casio Basic の仕様です。

グラフィックスと文字を同時に表示するには、グラフィックス画面で文字表示を行うコマンドが必要で、そのために Text コマンドが用意されています。

Text コマンド

書式Text [y],[x],[出力内容]
  • [y], [x]物理座標系での座標で、物理的なピクセル位置を指定する。y座標(縦方向) の [y] を先に指定するLocate とは [x], [y] の指定順序が異なる
  • [出力内容] は、"文字列" 、変数、数値、Getkeyコマンドが使える。これは Locate と同様。
入力方法
[SHIFT] [F4] (Sketch) [F6] (▷) [F6] (▷) [F2] (Text)

Text コマンドは、現在選択されている座標系に関係無く、物理座標系を用いる仕様です。物理座標系での位置指定で、縦方向つまり y 座標を先に指定するのは、慣れるまでは分かりにくいと思います。物理座標系を使う PxlOn などの位置指定も同じです。

では、上で作ったプログラムに、Text コマンドの行を追加してみます。

ファイル名: PLOT1.3
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

PlotOn 1,0
Locate 1,1,"Text"
Text 1,1,"Graphic"



実行してみると、

Plot1-3 

点が1つ描画され、さらに文字列 Graphic も表示されました。

ちなみに、Text コマンドで描画されるフォントは テキスト画面のフォントよりも小さくなっています。そのため、見た目が貧弱で見づらいのですが、LCDの解像度が低いので仕方ないですね。古い機種との互換性を考え、このようなフォントをそのまま使っているのでしょう。Text コマンドで表示されるフォントは、プログラム編集画面に入ったところで、[F6] (CHAR) を押すと一覧が現れます。

さて、ここで [SHIFT] [F6] (G↔T) を押すと、裏に回っていたテキスト画面が表示されますね。

Plot1-1-2 

ただ、本来 Text と表示されるべきですが、Done としか表示されません。そこで、Locate コマンドで表示する位置を1行下へずらしてみます(以下の赤文字に注目)。

ファイル名: PLOT1.4
CllrGraph
CoordOff
GridOff
AxesOff
LabelOff

PlotOn 1,0
Locate 1,2,"Text"
Text 1,1,"Graphic"


これを実行し、裏へ回っているテキスト画面に切り替えると、今度は文字列 Text が出てきました。

Plot1-4 

Done という表示は、テキスト画面の内部カーソル行に表示され、丸々1行を上書きしているようです。そのため、1行目に Text と表示した場合は、上書きされて消えたのですが、Locate コマンドで2行目に表示すると、カーソル行が1行目のままなので、2行目の文字列 Text が見えたわけです。

テキスト画面の内部カーソル行は、出力命令 " "  を1回実行すると1行下がり、ClrTextCls を実行するとリセットされて1行目に戻ります。
 ⇒ Casio Basic コマンドリファレンス - 出力命令 " "

グラフィックス描画の際に、テキスト画面に表示される Done が出現するのは、テキスト画面に出力するコマンド/命令が実行されるタイミングだということは分かっていますが、完全な法則性はまだ確認できていません。いずれはっきりと分かったら、紹介したいと思います。



ViewWindow の性質

ViewWindow コマンドは、座標系を設定します。直交座標系と極座標系の設定ができますが、当面直交座標系の設定について紹介します。

直交座標系 での書式
ViewWindow [Xmin],[Xmax],[Xscale],[Ymin],[Ymax],[Yscale]
  • Xmin: X軸(横方向)の左端の値
  • Xmax: X軸(横方向)の右端の値
  • Xscale: X軸(横方向)の目盛間隔
  • Ymin: Y軸(縦方向)の下端の値
  • Ymax: Y軸(縦方向)の上端の値
  • Yscale: Y軸(縦方向)の目盛間隔
ここで、注意が必要なのは、Xmin は、X軸の最小値ではなく、左端の値だということ。
例えは、Xmin = 63、Xmax = -63 と設定することもできます。この時は、X軸(横方向)は、右が小さく、左にゆくほど値が大きくなり、座標軸の方向を逆に設定できるわけです。

ここで、XminXmax などと紛らわしい表現をしたのには、理由があります。

例えば、

ViewWindow -10,30,5,-5,15,5

と記述する代わりに、

-10→Xmin
30→Xmax
5→Xscl
-5→Ymin
15→Ymax
5→Yscl


と記述することもできます。Xmin、Xmax、Xscl、Ymin、Ymax、Yscl は、Casio Basic で予め予約された変数で、これに値を代入することで座標系を設定できます。或いは、現在の座標系で設定されている各値を知ることもでき、プログラムを書く時役立つことがあります。

これら2つの異なる記法の整合性をとるために、紛らわしい表現になってしまっています。

==========

では、プログラムの中で ViewWindow で座標系の設定を変えると、どうなるのかを調べてみます。

先ずは、次のプログラムを入力してください。

ファイル名:VW.PCL.1
ClrGraph
CoordOn
GridOff
AxesOn
LabelOn

ViewWindow -20,20,5,-5,15,5

Text 7,1,"[EXE]"
PxlOn 20,30
Text 1,1,"PxlOn 20,30"◢

PlotOn 10,10
Text 1,1,"PlotOn 10,10"◢

Circle 0,0,15
Text 1,1,"Circle 0,0,15"◢

F-Line 0,0,10,10
Text 1,1,"F-Line 0,0,10,10"◢


以下からダウンロードして、fx-9860GII へ転送もできます。
⇒ Casio Basic プログラムファイル VW.PCL.1.g1m のダウンロード


これを起動すると、以下の画面になります。

VW-PCL-1 
テキスト表示は、PxlOn 20,30 を実行したことを示していて、物理座標の (y, x) = (20, 30) に点が描画されています。

[EXE] キーを押すと、

VW-PCL-2 
PlotOn 10,10 により、ViewWindow -20,20,5,-5,15,5 で設定された座標系で (x, y) = (10, 10) に点が追加されます。

さらに、[EXE] キーを押すと、

VW-PCL3 
Circle 0,0,15 により、原点 (0, 0) を中心にして、半径 15 の円が描画されます。既に描画した2つの点も見えます。

続いて、[EXE] キーを押すと、

VW-PCL-4 
F-Line 0,0,10,10 により、座標 (0, 0) から (10, 10) へ直線が描画されます。


ここでは、以下の描画コマンドを使いました;
  • PxlOn: 指定した座標のピクセルを On にする。物理座標系を使う
  • PlotOn: 点を描画する。論理座標系か ViewWindow 座標系を使う
  • Circle: 円を描画する。論理座標系か ViewWindow 座標系を使う
  • F-Line: 線を描画する。論理座標系か ViewWindow 座標系を使う
PxlOn

書式PxlOn [y],[x]
  • y と x で指定した座標のピクセルを On にする。
  • 物理座標系のみを使うコマンド。y = 1, 2, 3...63 の整数値、x = 1, 2, 3...127 の整数値。
  • y 座標(縦方向) を先に設定する。
入力方法[SHIFT] [F4] (Sketch) [F6] (▷) [F6] (▷) [F3] (PIXL) [F1] (On)


PlotOn

書式PlotOn [x],[y]
  • 座標 (x, y) に点を描画する。
  • 論理座標系 あるいは ViewWindow 座標系を使うコマンド。x, y は、小数でも良い。
入力方法[SHIFT] [F4] (Sketch) [F6] (▷) [F1] (PLOT) [F2] (Pl・On)


Circle

書式Circle [x],[y],[r]
  • 座標 (x, y) を中心として、半径 r の円を描画する。
  • 論理座標系 あるいは ViewWindow 座標系を使うコマンド。x, y, r は小数でも良い。
入力方法[SHIFT] [F4] (Sketch) [F6] (▷) [F3] (Crcl)


F-Line

書式F-Line [x1],[y1],[x2],[y2]
  • 座標 (x1, y1) と (x2, y2) を両端とした直線を描画する。
  • 論理座標系 あるいは ViewWindow 座標系を使うコマンド。x, y は小数でも良い。
入力方法[SHIFT] [F4] (Sketch) [F6] (▷) [F2] (LINE) [F2] (F・Line)

==========

さて、ここまで描画したところで、座標系を左へ10シフトしてみます。つまり、

座標系指定: ViewWindow -20,20,5,-5,15,5



座標系指定: ViewWindow -10,30,5,-5,15,5

に、変更します。


ファイル名:VW.PCL.1に1行追加
ClrGraph
CoordOn
GridOff
AxesOn
LabelOn

ViewWindow -20,20,5,-5,15,5

Text 7,1,"[EXE]"
PxlOn 20,30
Text 1,1,"PxlOn 20,30"◢

PlotOn 10,10
Text 1,1,"PlotOn 10,10"◢

Circle 0,0,15
Text 1,1,"Circle 0,0,15"◢

F-Line 0,0,10,10
Text 1,1,"F-Line 0,0,10,10"◢

ViewWindow -10,30,5,-5,15,5



これを実行すると、

VW-PCL-5 

と、テキスト画面が表示されます。

ここで [SHIFT] [F6] (G↔T) で、裏に回ったグラフィックス画面を表示させると、

VW-PCL-6 

座標軸とラベル XY 以外、何もありません。ViewWindow を実行すると、グラフィックス画面を消去することが分かります。
但し、グラフ設定はそのまま維持され、座標軸とラベルはグラフィックス画面の背景として表示されたままです。
ViewWindow はグラフィックス描画コマンドでないので、グラフィックス画面が裏へ回っています。

そこで、プログラムの最後に PlotOn を実行させると、グラフィックス画面を表示したままプログラムが終了するはずです。

ファイル名:VW.PCL.2
ClrGraph
CoordOn
GridOff
AxesOn
LabelOn

ViewWindow -20,20,5,-5,15,5

Text 7,1,"[EXE]"
PxlOn 20,30
Text 1,1,"PxlOn 20,30"◢

PlotOn 10,10
Text 1,1,"PlotOn 10,10"◢

Circle 0,0,15
Text 1,1,"Circle 0,0,15"◢

F-Line 0,0,10,10
Text 1,1,"F-Line 0,0,10,10"◢

ViewWindow -10,30,5,-5,15,5
PlotOn 10,10



以下からダウンロードして、fx-9860GII へ転送しても使えます。
⇒ Casio Basic プログラムファイル VW.PCL.2.g1m のダウンロード


これを起動して、[EXE] を4回か押すと、以下の画面になります。

VW-PCL-7 

全てのグラフィックス描画が消去された後、PlotOn コマンドで1つだけ点が描画されていて、グラフィックス画面が表に表示されています。



ClrGraph とグラフ設定 / ViewWindow 以外の座標系設定法

ClrGraph コマンドを実行すると、グラフィックス画面が消去されるだけでなく、論理座標系に設定されます。

例えば、以下のような ViewWindow 座標系を指定します。これは、論理座標系と同じです。

ViewWindow -6.3,6.3,0,-3.1,3.1,0

また、以下のような別の表記で同じ設定ができます。

-6.3→Xmin:6.3→Xmax:0→Xscl
-3.1→Ymin:3.1→Ymax:
0→Yscl


但し、赤文字で示した3番目と6番目のパラメータは、座標軸と一緒に表示される目盛の間隔を設定するものです。座標軸を On にする時(AxesOn) に意味があります。これはグラフ設定の1つですが、4つのグラフ設定コマンドでは指定できません。

ClrGraph を実行すると目盛間隔が 1 に設定されることを、別の方法で確認してみます。

ファイル名:CLRGRPH3
AxesOn
0→Xscl:0→Yscl
"Set Scale to 0."◢

ClrText
ClrGraph
Locate 1,1,"Xmin:"
Locate 6,1,Xmin
Locate 12,1,"Xmax:"
Locate 17,1,Xmax
Locate 1,2,"Xscl:"
Locate 6,2,Xscl
Locate 1,3,"Xfct:"
Locate 6,3,Xfct
Locate 12,3,"Xdot:"
Locate 17,3,Xdot

Locate 1,5,"Ymin:"
Locate 6,5,Ymin
Locate 12,5,"Ymax:"
Locate 17,5,Ymax
Locate 1,6,"Yscl:"
Locate 6,6,Yscl
Locate 1,7,"Yfct:"
Locate 6,7,Yfct



入力が面倒な場合は、以下からダウンロードして、fx-9860GII へ転送できます。
⇒ Casio Basic ファイル CLRGRPH3.g1m のダウンロード


Xmin, Xmax, Xscl, Xfct, Xdot, Ymin, Ymax, Yscl, Yfct の入力は、ショートカットが分からない時は [SHIFT] [4] (CATALOG) で現れるコマンドリストから探せます。

Xmin の入力
[VARS] [F1] (V・WIN) [F1] (X) [F1] (min)

Xmax の入力
[VARS] [F1] (V・WIN) [F1] (X) [F2] (max)

Xscl の入力
[VARS] [F1] (V・WIN) [F1] (X) [F3] (scal)

Xdot の入力
[VARS] [F1] (V・WIN) [F1] (X) [F4] (dot)

Ymin の入力
[VARS] [F1] (V・WIN) [F2] (Y) [F1] (min)

Ymax の入力
[VARS] [F1] (V・WIN) [F2] (X) [F2] (max)

Yscl の入力
[VARS] [F1] (V・WIN) [F2] (Y) [F3] (scal)

Xfct の入力
[VARS] [F2] (FACT) [F1] (Xfct)

Yfct の入力
[VARS] [F2] (FACT) [F2] (Yfct)


なお、このプログラムでは、XsclYscl 以外に、Xfct, Xdot, Yfct についても値を調表示します。

先ず最初に、AxesOn で座標軸を表示させる設定にし、X と Y 座標軸の目盛間隔を 0 に設定。これで、座標軸を表示するが目盛は表示しないようになります。この設定を行ったところで、出力命令◢ で一旦実行を止めて、Set Scale to 0. (目盛に 0 をセット)と表示させます。

ClrGraph-1 

ここで、グラフィックス画面を確認するために、[SHIFT] [F6] (G↔T) で裏に回っているグラフィックス画面を表示してみると、

ClrGraph-3 

座標軸は表示されているが、目盛は表示されていない、つまりプログラムコード通りに表示されていることが確認できます。

出力命令◢ で一旦停止しているプログラムを、[EXE] キーを押して停止解除すると、残りの処理を最後まで実行して、各変数の値を表示します。

ClrGraph-2 

XsclYscl が共に 1 になっています。ClrGraph を実行すると、スケールが 1 に設定されるようです。

再び裏に回っているグラフィックス画面を確認するために、[SHIFT] [F6] (G↔T) を押すと、

ClrGraph-4 

目盛が間隔 1表示されていることが、再度確認できました。ここで、例えば PlotOn 1,1 を実行すると、目盛間隔が 1 になっていることも確認できます。


なお、Xdot は1ピクセルの値を示したり、設定する変数です。Ydot は準備されていないようです。1→Xdot とするとピクセルあたり 1 に設定できることは、簡単に確かめられます。

XfctYfct は拡大率を示していて、共に 2 に設定されるようです。
これは、0→Xscl:0→Yscl の下に、1→Xfct:1→Yfct を追加して、プログラムを実行すると、これがの値が 2 に変更されることが確認できます。是非やってみてください。

fx-9860GII OS 2.04 では、グラフ機能の1つにデュアルグラフといって、1画面に2つのグラフを表示する機能があります。ここからは推測ですが、デュアルグラフ機能を前提にして、ClrGraph で拡大率を 2 に設定するのではないかと思われます。

以上の実験から、ClrGraph の動作内容が詳しくわかりました。

ClrGraph の動作
  • グラフィックス画面を消去すると同時に、座標標系を論理座標に設定する。
  • 再設定の内容は、ViewWindow -6.3,6.3,1,-3.1,3.1,1 と同じで、X、Y 軸の目盛間隔を 1 に設定する。
  • 併せてグラフの拡大率を X、Y 軸共に 2 に設定する。



Casio Basic プログラムのファイル名について

fx-9860GII OS 2.04 の Casio Basic では、電卓上ではプログラムファイル名に  の文字が使えます。
これらの文字を使ったプログラムファイルを PCリンクソフト FA-124 Ver 2.04 を使ってPCへ転送・保存できます。

ところが、ファイル名に を含んだファイル、例えば TEST-1 を FA-124 で 別のフォルダへ Export しようとすると、This file nmae is invalid. (このファイル名は無効です.) とエラー表示が出て、保存ができないことを見つけました。ファイル名に が含まれたもの、例えば TEST.1 はエラーが出ません。

TEST-1 を別のフォルダで Export しようとして、ファイルダイアログで上のエラーが出たとき、ファイル名を TEST.1.G1M に変更すると、保存できます。そして、今度は逆に 今保存した TEST.1.G1M を FA-124 で Import すると、TEST-1 へ上書きされ、TEST.1 として保存されません。

Casio ファイル、g1m ファイルは、ファイル先頭部分でファイル名情報を保持しています。そして、FA-124 では、ファイル名自体をチェックせず、ファイルの先頭部にあるファイル名情報をみでチェックしているため、実際のファイル名とファイル名情報に矛盾が発生していることになります。

FA-124 は基本的に古いソフトなので、以前のグラフ関数電卓では、- 文字をファイル名に使えなかった時の仕様を引きずっているのではないかと思われます。

実際のファイル名と内部で保持しているファイル名情報に矛盾があるのは、あまり良いことでないので、プログラムファイル名に 文字を使わないほうが良いでしょう。



今回のまとめ
  • ClrGraph コマンドは、グラフィックス画面の消去だけでなく、座標系を論理座標系に変更する。
  • ClrGraph コマンドは、スケールを 1 に変更する。
  • Cls コマンドは、テキスト画面とグラフィックス画面の両方を消去するのみ。座標系の変更は行わない。
  • テキスト画面に表示するコマンドは、グラフィックス画面への出力には使えない。
  • グラフィックス画面に文字列を描画するには、Text コマンドを使う。
  • 明示的な消去を行うコマンドを使わない限り、グラフィックス画面の描画はそのまま残る。
  • [SHIFT] [F6] (CHAR) で、グラフィックス画面とテキスト画面の表示を切り替える。
  • ViewWindow コマンドは、グラフィックス画面の描画を消去する。但し Plot コマンドによる描画は例外(次回紹介する)。
  • Casio Basic ファイル名には、- 文字を使わないほうが良いと思われる。


今回使ったグラフィックス コマンド
  • ClrGraph
  • CoordOff
  • GridOff
  • AxesOff
  • LabelOff
  • ViewWindow
  • Text
  • PlotOn
  • PxlOn
  • Circle
  • F-Line
  • 座標系設定やグラフ設定で使える変数: Xmin, Xmax, Xscl, Xfct, Xdot, Ymin, Ymax, Tscl, Yfct




つづく...

Casio Basic入門G04 / 目次




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


 



keywords: fx-9860GIICasioBasic、プログラミング入門グラフィックスプログラム関数電卓

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


関連記事

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

Casio Basic入門G01

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

追記 2015/06/26
更新 2015/08/15
修正 2015/12/07
追記 2017/09/25

 5. Casio Basic でグラフィックス


はじめに

グラフ描画機能を世界で初めて電卓に取り入れたのが、カシオの fx-7000G です。それ以来、カシオのグラフ関数電卓は、教育現場の意見や要望を取り入れながら、数学教育ツールとして開発が継続されています。その延長線上に fx-9860GII があります。

私自身は、これまで fx-5800P を使いこなしてきたので、fx-9860GII のグラフ機能やグラフィックス機能が、Casio Basic にどのように実装されているのかは殆ど知らず、カシオのグラフ関数電卓のグラフィックス描画速度が非常に遅いという感覚だけが有りました。

fx-9860GII やグラフ関数電卓の Casio Basic でグラフィックス プログラミングがどのようなものか知りたいと思っても、fx-9860GII の取扱説明書のプログラム機能の記述は、特にグラフィックスに関しては、fx-5800P 以上に不親切です。

そこで、入手できる情報を元にして、自分で色々と調べて、Casio Basic 入門として記録してゆこうと思います。


Chapter G01
LCDと3つの座標系

グラフィックス描画の単位は、LCD(液晶ディスプレイ)の1ピクセルです。
fx-9860GII はモノクロLCDを使っているので、必要なピクセルをOn / Off すれば、グラフィックス描画ができます。

ピクセル1つを On したり、Off したり、On と Off を切り替えるなどのコマンドがあり、線分、水平線や垂直線、円を描画するコマンドがあります。さらに、関数をグラフとして表示するための高度なコマンド もありそうです。


Casio Basic のグラフィックス描画エリア


グラフィックス表示エリア fx-9860GII のLCDは、128 x 64 ピクセルのドット・マトリックスです。ところが、Casio Basic では、LCDの横 127ピクセル、縦63ピクセルがグラフィックス描画エリアになっています。横と縦のピクセル数を奇数にすれば、エリアの中央のピクセルを原点として、エリアを対称に使えます。グラフ描画を主眼に考えてのことだと推察されます。ちなみに Add-in プログラムを作る際には、128 x 64 ピクセル全てを使えることから、127 x 63 ピクセルの描画エリアは Casio Basic の仕様だと分かります。



3つの座標系
[2017/09/25 追記]
以下の3つの座標系を切り替えて使います。

論理座標系
 ・デフォルトの論理座標系 (ClrGraph で設定)
 ・ViewWindow座標系 (ViewWindow で設定)
物理座標系
 設定コマンドはない。物理座標系専用コマンドを使えば自動的に物理座標で使える。
 ※物理座標系専用コマンド: PxlOn、PxlOff、PxlChg、PxlTest(、Text


デフォルトの論理座標系

論理-座標系
Casio Basic で用いる座標系の1つに、描画エリア中央を原点にし、左の図のような論理座標系があります。1dot の値が 0.1 に固定されています。

例えば、座標 (5, -3) は、原点ピクセルから、右に50 dot、下に 30dot の位置になります。





この座標系で使えるコマンドには、Plot, PlotOn, PlotOff, PlotCng, Line, F-Line, Circle, Horizonal, Vertical などが挙げられます。

この座標系は、数学でグラフを書く時に分かりやすいのですが、1dot の値が 0.1 に固定されているので、この狭い範囲にグラフが収まりきらないことが多く発生します。そこで、1dot の値を自由に設定し、原点も自由に設定できれば、あらゆるグラフが書ける座標系を設定できるようになります。


ViewWindow 座標系

Casio Basic には、論理座標系を自由に設定するために、ViewWindow コマンドが用意されています。

ViewWindow 座標系設定の書式 (直行座標系の場合) [2015/06/27 更新]

ViewWindow
[左端のxの値],[右端のxの値],0,[下端のyの値],[上端のyの値],0 
  1. 3番目と6番目のパラメータは、座標軸を描画する際、AxesOn を指定した場合の目盛間隔(スケール)を指定する。座標軸と共にグラフを描画しない場合は、両方とも 0 としておけば良い。
  2. 例えば、ViewWindow 1,127,0,63,1,0 とすれば、物理座標系と同様になる(但し、小数値での座標設定ができる点が、物理座標とは異なる)。

ViewWindow座標系   
例えば、
ViewWindow 0,126,0,0,62,0 [2015/08/15 訂正]
とすれば、左の図の座標系を設定できます。
この設定例は、1dot の値が 1 つまり、数値とピクセル数が一致するので、グラフィックス描画を行う時、分かりやすくなります。


プログラムのロジックや使う変数に応じて、処理速度を最適化するために、柔軟に座標系を設定できる点も、グラフィックス プログラミングに適しているかも知れません。

この座標系で使えるコマンドには、デフォルトの論理座標系と同じ Plot, PlotOn, PlotOff, PlotChg, Line, F-Line, Circle, Horizontal, Vertical などが挙げられます。


物理座標系

さて、Casio Basic には、もう一つの座標系があります。

物理-座標系
LCDの左上隅のピクセルを原点とする座標系で、PCなどのグラフィックスで最も一般的な座標系です。

但し、原点は (0, 0) でなくて、(1, 1) で、x や y には 1以上の整数しか使えません。整数でないとエラーになります。

ちなみに、論理座標系や ViewWindow座標系では(x, y) に小数を使ってもエラーにならず、指定位置に最も近いピクセルが自動的に選ばれます。

さらに、物理座標系で使えるコマンドの座標値の記法は、x と y の順序を逆、つまり y の値を先に x の値を後にして (y, x) としなければなりません。

この座標系では、Text, PxlOn, PxlOff, PlxChg, PxlTest( ) が使えます。これらのうち、Text を除く他のコマンドでは、座標値に変数を用いる時、PxiOn Y,X というように、変数 XY を使えません。他のアルファベットは使えます。X と Y は、内部動作のための予約変数で、XY を使うとエラーになります。

[2015/12/07 修正]

座標指定に変数 X と Y を使う際、例えば、PxlOn Y,X と記述する時には注意が必要です。Text を除く他のコマンドを実行すると、変数 X と Y には、指定した物理座標系での位置を論理座標系に変換した座標 (X, Y) が自動的に格納されます。PxlOn B,A を実行しても、物理座標系での座標 (A, B) が 論理座標系に変換された座標 (X, Y) に対応する値が X と Y に自動格納されます。

さらに、X と Y には論理座標系での値が自動的に入るので、負の値や小数になることが多く、PxlOn B,A の実行直後に PxlOn Y,X を実行すると、X と Y に正の整数以外が入っている場合はエラーになります。Text を除く物理座標系で使うコマンドには、X と Y 以外の変数を座標指定に使った方が、このエラーに悩まされずに楽かも知れません。
====== 修正ここまで =====

これは、面白いので後で取り上げる予定ですが、確認するために作ったプログラムをダウンロードできます。興味のある方には、先行して遊んでみてください。
 ⇒ PxlOn の予約変数 X, Y を調べて見る
   (上を左クリックして現れるポップアップウィンドウで、リンクを右クリックし、[名前を付けてリンク先を保存] を選択)



サンプルプログラムを作ってみる

fx-9860GII は、128 x 64 ドットのモノクロLCD(液晶ディスプレイ)を搭載していますが、Casio Basic でのグラフィックスエリアは 127 x 63 ドットです(上記参照)。

以下のプログラムを実行すると、LDCの上端の1ラインと左端の1ラインが、グラフィックスエリアに使われていないことが確認できます。(但し、グラフィックス描画以外には、使われるケースがあることも分かっています。今後紹介します)。

なお、プログラム実行中の方が視認性が良くなります。見づらい場合はLCDのコントラストを調整してみてください。

ClrGraph
LabelOff
For -3.1→Y To 3.1 Step 0.1
Horizontal Y
Next

(論理座標系)

プログラムの入力と実行の操作方法は、「ソフトウェア バージョン Ver 2.04 取扱説明書」の第8章 プログラム機能、8-1 ページにある 「1.プログラムの作成から実行までの流れ」 を参照してください。

fx-9860GII の取扱説明書は、製品に添付されているCDに PDF ファイルとしてあります。または、カシオのサイトからダウンロードできます。
 ⇒ fx-9860GII_Soft_J.pdf

fx-9860GII で入力するコマンドは、複数のメニューに分散していて、最初は探すのに苦労します。fx-5800P のようにスッキリとまとまっていないので、なんとかして欲しいと思います。

- ClrGraph の入力
[SHIFT] [VARS] (PRGM) [F6] (▷) [F1] (DLR) [F2] (Grph)


- LabelOff の入力
[SHIFT] [MENU] (SET UP) [F5] (LABL) [F2] (Off) 


- For / To / Step / Next の入力
[SHIFT] [VARS] [F1] (COM) [F6] (▷) 
とすると、[F1][F4] にそれぞれ、ForToStepNext が割り当てられている。


- Horizontal の入力
[SHIFT] [F4] (Skeych) [F6] (▷) [F5] (Hztl)



コマンド類は、おおよそ以下の場所に分散しています;

- プログラムの制御に関するもの:
[SHIFT] [VARS] から下位のメニュー

- グラフ機能(グラフィックス機能) の描画に関するもの;
[SHIFT] [F4] (Sketch) から下位のメニュー

-グラフ機能(グラフィックス機能)の設定に関するもの;
[SHIFT] [MENU] (SET UP) から下位のメニュー

- ViewWindowの設定に関するもの;
[SHIFT] [F3] (V-Window) から下位のメニュー


上記のプログラムは、グラフィックスエリアを塗りつぶしています。同様にエリアを塗りつぶすために、PxlOn コマンドでピクセルを順に塗りつぶすプログラムは以下になります。

ClrGraph
For 1→A To 63
For 1→B To 127
PxlOn A,B
Next
Next

(物理座標系)

描画速度を比較すると、Horizontal コマンドを用いる方が、圧倒的に速いことが分かります。



今回のまとめ
  • fx-9860GII のLCDは 128 x 64 ピクセル
  • fx-9860GII のグラフィックス描画エリアは 127 x 63 ピクセル
  • fx-9860GII は3つの座標系を使い分ける
    • デフォルトの論理座標系: LDC中央が原点、1dot = 0.1 で固定
    • ViewWindow座標系: 自由に設定可能な座標系
    • 物理座標系: LCDピクセルを直接指定する座標系、1 dot = 1、整数指定
  • グラフィックス コマンドにより描画速度が大きく異なる

今回使ったグラフィックス コマンド
  • ViewWindow
  • ClrGraph
  • Horizontal
  • PxlOn





つづく...

Casio Basic入門G02 / 目次




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


 



keywords: fx-9860GIICasioBasic、グラフィックス, プログラミング入門プログラム関数電卓

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


関連記事

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

Casio Basic入門G02

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

訂正 2015/07/29
訂正 2017/09/25



 5. Casio Basic でグラフィックス


前回: Casio Basic入門G01


Chapter G02
グラフィックス画面の設定と描画

Casio Basic でグラフィックスを描画するには、グラフ描画を主目的に考えられている fx-9860GII の特徴を理解しておくと、その後の理解が楽になるので、前回は Casio Basic でのグラフィックス描画エリアがLCDの全エリアでないこと、3種類の座標系(デフォルトの論理座標系、ViewWindow 座標系、物理座標系)を使えることを紹介しました。

今回は、fx-9860GII の特徴をさらに調べながら、グラフィックス コマンドを使ってみます。


グラフィックス画面とテキスト画面

fx-9860GII の Casio Basic では、グラフィックス コマンドで描画を行うグラフィックス画面と、テキスト出力コマンドで表示されるテキスト画面があって、グラフィックス コマンドとテキスト出力コマンドは、1つの画面に一緒に出力できないようになっています。また、グラフィックス画面やテキスト画面は、それぞれ1枚づつしかなく、全てのCasio Basic プログラムで共用されます。
  • fx-5800P では、出力命令 " " と Locate コマンドで画面出力しますが、これらはテキスト画面へ出力します。fx-9860GII でもこれらの命令・コマンドが使えますが、同様にテキスト画面へ出力します。
  • グラフィックス コマンドとテキスト出力は、これら2つの画面を切り替えて表示が行われます。詳しくは次回以降で紹介します。


グラフィックス消去コマンド

グラフィックス画面の消去は、ClrGraph Cls コマンドで行います。

fx-5800P と fx-9860GII の画面消去コマンドをを整理しておきます。共通して使える Cls は、画面消去コマンドです。

Casio Basic の画面消去コマンド [2015/07/29 訂正]
コマンドfx-5800Pfx-9860GII
Cls画面消去(テキスト画面のみ)グラフィックス画面の消去
(座標系の変更は行わない)
ClrTextなしテキスト画面の消去
ClrGraphなしグラフィックス画面の消去と座標系をクリアして論理座標系へ戻す
  • fx-9860GII では、グラフィックス描画のためには、専用のグラフィックス画面が使われます。
  • fx-5800P と共通して使える出力命令 " "Locate コマンドは、テキスト画面に表示され、グラフィックス画面への表示はできません。
  • fx-5800P の Cls コマンドは、fx-9860GII の ClrText と同じ動作です。
グラフィックス画面に描画された状態は、ClrGraph を実行しない限り残っています。1つのプログラムでグラフィックス描画を行い、ClrGraph で消去しないでおくと、プログラムで ClrGraph しないと、その残った画面の上にグラフィックス描画が行われる仕様です。

従って、プログラムの最初か最後に ClrGraph を実行しておくのが望ましいでしょう。

fx-9860GII での Cls 入力方法
[SHIFT] [F1] (Cls)

fx-9860GII での ClrText 入力方法
[SHIFT] [VARS] (PRGM) [F6] (▷) [F1] (CLR) [F1] (Text)

fx-9860GII での ClrGraph 入力方法
[SHIFT] [VARS] (PRGM) [F6] (▷) [F1] (CLR) [F2] (Grph)


サンプルプログラム 1

ちょっと実験してみます。以下の2つのプログラムを入力して、先にプログラム H を実行し、その後プログラム V を実行してください。

ファイル名: H (水平線を描く)
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
Horizontal 0


ファイル名: V (垂直線を描く)
Vertical 0


※ プログラム HCoordOffGrifOffAxesOffLablelOff を入力する方法は、下の グラフ設定コマンド にあります。
Horizontal の入力方法
  [SHIFT] [F4] (Sketch) [F6] (▷) [F5] (Hztl)
Vertical の入力方法
  [SHIFT] [F4] (Sketch) [F6] (▷) [F4] (Vert)

プログラム H を実行すると、グラフィックス画面に水平線が描かれますが、最後に ClrGraph が実行されていないので、グラフィックス画面には水平線が残ったままです。次に、プログラム V を実行すると、垂直前のみを描くにもかかわらず、画面には水平線と垂直線の両方が描かれています。グラフィックス画面上の描画は、ClirGraph や Cls が実行されない限り、残っていることが確かめられました。

さらに、グラフィックス画面はプログラムごとに別に用意されるのではなく、共通して全てのプログラムで使われることも確認できました。

ところで、プログラム H と V では、座標系の指定を行っていませんが、ClrGraph を実行しています。ClrGraph により座標系がクリアされて論理座標系に設定されていることが、分かると思います。[2015/07/08 修正] 座標系については、Casio Basic入門G01 を参照してください。



グラフ設定コマンド

fx-9860GII には、4種類のグラフ設定コマンドがあります。

1) CoordOn / CoordOff : カーソル位置の座標値出力を On / Off する
この設定コマンドは、Plot コマンドで入力待ちになっている時に有効となる。座標値出力領域にはグラフィックス描画されない。詳しくは次回以降で紹介する。

この設定は、プログラムとは関係無く保存され、1つのプログラムで On にすると、それ以降実行するプログラムでも On の設定が生きている。従って、プログラムごとに 設定するのが望ましい。

fx-9860GII での CoordOn 入力方法
[SHIFT] [MENU] (SET UP) [F2] (COOR) [F1] (On)

fx-9860GII での CoordOff 入力方法
[SHIFT] [MENU] (SET UP) [F2] (COOR) [F2] (Off)


2) GridOn / GridOff : グリッドの表示を On / Off する
この設定コマンドは、グリッド表示を On / Off する。グリッド表示の上にグラフィックスが描画されるので、画面の背景だと思うと分かりやすい。

この設定は、プログラムとは関係無く保存され、1つのプログラムで On にすると、それ以降実行するプログラムでも On の設定が生きている。従って、プログラムごとに 設定するのが望ましい。

fx-9860GII での GridOn 入力方法
[SHIFT] [MENU] (SET UP) [F3] (GRID) [F1] (On)

fx-9860GII での GridOff 入力方法
[SHIFT] [MENU] (SET UP) [F3] (GRID) [F2] (Off)


3) AxesOn / AxesOff : 座標軸の表示を On / Off する
この設定コマンドは、座標軸表示を On / Off する。座標軸表示の上にグラフィックスが描画されるので、画面の背景だと思うと分かりやすい。

この設定は、プログラムとは関係無く保存され、1つのプログラムで On にすると、それ以降実行するプログラムでも On の設定が生きている。従って、プログラムごとに 設定するのが望ましい。

fx-9860GII での AxesOn 入力方法
[SHIFT] [MENU] (SET UP) [F4] (AXES) [F1] (On)

fx-9860GII での AxesOff 入力方法
[SHIFT] [MENU] (SET UP) [F4] (AXES) [F2] (Off)


4) LabelOn / LabelOff : 座標軸の X、Y ラベル表示を On / Off する
この設定コマンドは、X座標とY座標を示す X, Y ラベル表示を On / Off する。ラベル表示の上にグラフィックスが描画されるので、画面の背景だおt思うと分かりやすい。

この設定は、プログラムとは関係無く保存され、1つのプログラムで On にすると、それ以降実行するプログラムでも On の設定が生きている。従って、プログラムごとに 設定するのが望ましい。

fx-9860GII での LabelOn 入力方法
[SHIFT] [MENU] (SET UP) [F5] (LABL) [F1] (On)

fx-9860GII での LabelOff 入力方法
[SHIFT] [MENU] (SET UP) [F5] (LABL) [F2] (Off)


実際の表示例を示すと以下のようになります。

座標描画 w/o Grid 
GridOff (グリッドなし)、AxesOn (座標軸あり)、LabelOn (ラベルあり) を設定した時のグラフィックス画面

座標描画 w/ Grid 
GridOn (グリッドあり)、AxesOn (座標軸あり)、LabelOn (ラベルあり) を設定した時のグラフィックス画面

この2つの画面を見比べると、座標軸の目盛りとグリッドの点が共用されていることが分かります。面白いアイデアですね。

なお、4つの設定全てを Off にすると、グラフィックス画面の背景は何もなくなります。


サンプルプログラム 2

次のような表示を作ってみます。

PlotOn 2,2 

(x, y) = (2, 2) の座標に点が1つあります。
  • 最初に グラフィックス画面を消去します。
  • 次に、座標軸とラベルの表示を On にします。
  • 最後に、PlotOn コマンドで、座標 (x, y) = (2, 2) に点を表示します。
PlotOn の書式
PlotOn x,y
現在の座標系(論理座標系か ViewWindow座標系)で、座標 (x, y) に点を描画する。

PlotOn の入力方法
[SHIFT] [F4] (Sketch) [F6] (▷) [F1] (PLOT) [F2] (Pl・On}

以下を入力して実行してみてください。上の写真のようになりますか?

ClrGraph
CoordOn
GridOn
AxesOn
LabelOn
PlotOn 2,2


ViewWindowで座標系を指定しなければ、ClrGraph により論理座標系が適用されています。



画面塗りつぶしプログラム

グラフィックス領域の半分を塗りつぶすプログラムを4通りの方法で作ってみます。

MarkOut Half 

ファイル名: MARKOUT1
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,0,62,0
For 0→Y To 31
For 0→X To 126
PlotOn X,Y
Next
Next


プログラムの説明
・グラフィックス画面の消去

・4つのグラフ設定:
 全て Off にする

ViewWindow 座標系設定:
 グラフィックス画面左下隅を原点 (0, 0) とし、
 右下隅のピクセルの座標を (126, 0)、
 右上隅のピクセルの座標を (126, 62) とする。  

・ピクセルの描画: PlotOn を使う
 ピクセルを左から右へ、そして下から上へ順に表示してゆく。
 ここで For 文を使っています。
 ⇒ CasioBasic コマンドリファレンス - For 文

プログラムの実行
結構な時間がかかります。fx-9860GII のグラフィックスは処理が遅いことが分かります。

プログラムのダウンロード
 ⇒ MarkOut1
 ⇒ ダウンロードしたファイルを fx-9860GII へ転送する方法

==========


次に、水平線を下から上へ順に描画する方法を試します。

ファイル名: MARKOUT2
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,0,62,0
For 0→Y To 31
Horizontal Y
Next


プログラムの説明
・グラフィックス画面の消去

・4つのグラフ設定:
 全て Off にする

ViewWindow 座標系設定:
 グラフィックス画面左下隅を原点 (0, 0) とし、
 右下隅のピクセルの座標を (126, 0)、
 右上隅のピクセルの座標を (126, 62) とする。  

--- ここまでは、MARKOUT1 と同じ ---

・水平線の描画: Horizontal を使う
 水平線を下から上へ順に表示してゆく。

 Horizontal の書式
 Horizontal y
 現在の座標系で、縦軸の y 座標の位置に水平線を描画する。

 Horizontal の入力方法
 [SHIFT] [F4] (Sketch) [F6] (▷) [F5] (Hztl)

プログラムの実行
MARKOUT に比べて、かなり高速化されました。

プログラムのダウンロード
 ⇒ MarkOut2
 ⇒ ダウンロードしたファイルを fx-9860GII へ転送する方法

==========


今度は、左端から右端までの直線を下から上へ順に描画する方法を試します。

ファイル名: MARKOUT3
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,0,62,0
For 0→Y To 31
F-Line 0,Y,126,Y
Next


プログラムの説明
・グラフィックス画面の消去

・4つのグラフ設定:
 全て Off にする

ViewWindow 座標系設定:
 グラフィックス画面左下隅を原点 (0, 0) とし、
 右下隅のピクセルの座標を (126, 0)、
 右上隅のピクセルの座標を (126, 62) とする。  

--- ここまでは、MARKOUT1 / MARKOUT2 と同じ ---

・直線の描画: F-Line を使う
 左端から右端までの直線を下から上へ順に表示してゆく。

 F-Line の書式
 F-Line x1,y1,x2,y2
 現在の座標系で、起点座標 (x1, y1) から終点座標 (x2, y2) まで直線を描画する。

 F-Line の入力方法
 [SHIFT] [F4] (Sketch) [F6] (▷) [F2] (LINE) [F2] (F-Line)

プログラムの実行
MARKOUT2 と同じ描画時間でした。

プログラムのダウンロード
 ⇒ MarkOut3
 ⇒ ダウンロードしたファイルを fx-9860GII へ転送する方法

==========


最後に、太い水平線を下から上へ順に描画する方法を試します。

ファイル名: MARKOUT4
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
ViewWindow 0,126,0,0,62,0
For 0→Y To 31 Step 2    
[2017/09/25 修正: Step 2 が抜けていたのを追加]
SketchThick Horizontal Y
Next


プログラムの説明
・グラフィックス画面の消去

・4つのグラフ設定:
 全て Off にする

ViewWindow 座標系設定:
 グラフィックス画面左下隅を原点 (0, 0) とし、
 右下隅のピクセルの座標を (126, 0)、
 右上隅のピクセルの座標を (126, 62) とする。  

--- ここまでは、MARKOUT1 / MARKOUT2 / MARKOUT3 と同じ ---

・太い水平線の描画: Sketch Horizontal を使う
 太い水平線を下から上へ順に表示してゆく。

 SketchThick の書式
 SketchThick [線や円の描画コマンド]
 線や円の描画を、太線で実行する。
 ここで、使える 線や円の描画コマンドは、
 ・ LineF-LineHorizontalVerticalCircle がある。

 線の描画に Horizontal を適用すると、
 SketchThick Horizontal y となって、ピクセル2つの太さで水平線を描画する。

 SketchThick の入力方法
 [SHIFT] [F4] (Sketch) [F6] (▷) [F6] (▷) [F5] (STYL)

プログラムの実行
MARKOUT2 や MARKOUT3 よりも、さらに高速化されました。

プログラムのダウンロード
 ⇒ MarkOut4
 ⇒ ダウンロードしたファイルを fx-9860GII へ転送する方法

==========


Casio Basic のグラフィックス描画も、場合によってはかなり高速になることが分かりました。

グラフィックス コマンドによる描画時間の違い
プログラム ファイル名コマンド描画時間
MARKOUT1PlotOn x,y203.5秒
MARKOUT2Horizontal y2.0秒
MARKOUT3F-Line x1,y1,x2,y22.0秒
MARKOUT4SketchThick Horizontal y1.3秒




グラフィックス描画のしくみ - 描画時間を決める要素

グラフィックスデータは、マイクロブロセッサにより、VRAMと呼ばれるメモリ(領域)に送られます。次に、VRAM のデータが液晶ディスプレイ (LCD)へ転送されてグラフィックスが表示されます。

PlotOn コマンドが実行される時は、ピクセル1個の描画データが VRAM へ書き込まれるたびに、そのデータが LCD へ転送されます。

fx-9860GII では、この転送速度が遅く、従ってMARKOUT1 プログラムの実行に時間がかかるわけです。実行されている時、実際にピクセルが1個づつ描画されるのが見えます。

次に、Horizontal コマンドで水平線を1本づつ描画する時は、水平線1本分の描画データが VRAM に送られると、そのデータがまとめて LCD へ転送されます。時間がかかる転送動作が少なくて済むので、それだけ描画が速くなります。

3つめの、F-LINE コマンドで直線を1本づつ描画する場合も、水平線の時と同様に、直線1本分のデータが VRAM に送られ、それがまとめて LCD へ転送されるので、Horizontal と同じ時間がかかるわけです。

最後のプログラム例では太い水平線を描画していますが、水平線2本分の描画データが、まとめて LCD に転送されるため、さらに描画が速くなるのがわかります。

MARKOUT1 では、127 x 32 = 4064 ピクセルを描画する時、1ピクセルごとに LCD転送するので、転送回数は 4064回。
MARKOUT2 では、直線1本ごとに LCD転送するので、転送回数は 32回。
MARKOUT3 でも、水平線1本ごとにLCD転送するので、転送回数は 32回。
MARKOUT4 では、水平線2本ごとにLCD転送するので、転送回数は 16回。

そこで、描画時間を LCD 転送回数で割ってみると (T / F) 下表のようになり、数十ミリ秒のオーダーでほぼ同じくらいになっています。但し、転送回数が少なければ、1回の転送データが大きくなるので、T / F が下へゆくほど大きくなるのは理解できて、10~20ミリ秒の違いは、VRAM へのブロック転送の時間の違いだと考えれば、納得できる範囲です。

LCD 転送1回あたりの描画時間 [fx-9860GII USB POWER GRAPHIC 2]
プログラム ファイル名描画時間 / TLCDへの転送回数 / FT / F
MARKOUT1203.5秒4064回0.05
MARKOUT22.0秒32回0.06
MARKOUT32.0秒32回0.06秒
MARKOUT41.3秒16回0.08

==========


さて、Casio Basic で作った MARKOUTx と同様のプログラムを Casio SDK を使ってC言語でアドインを作ってみました。

 ⇒ アドインのダウンロード: markout3.zip 

ダウンロードした圧縮ファイルに、含まれる markout3.g1a がアドインファイルです。これを fx-9860GII に添付されているPCリンクソフト FA-124 Ver 2.04 を使って fx-9860GII へ転送します。詳しい操作は、FA-124 Ver 2.04 の取扱説明書をご参照ください。

add-in icon markout3 
[MENU] (MAIN MENU) から [MArK 3] アイコン を選び [EXE] キーで起動すると、

add-in startup markout3 
F1: MarkOut Dot
F2: MarkOut Line
F3: MarkOut Thick Line


と表示されます。

[F1] は、ピクセルごとに、順に LCD へ転送して描画します。
[F2] は、水平な線ごとに、順に LCD へ転送して描画します。
[F3] は、水平な線を2本ごとに、順に LCD へ転送して描画します。

add-in result markout3 
画面の下半分を塗りつぶしたとことで、所要時間を表示します。


その結果は、Casio Basic と同じ傾向になります(速度自体は圧倒的に速いのですが...)。同じ傾向を示すので、グラフィックス描画コマンドによる速度の違いは、LCD転送の回数の違いであることが確かめられました。Casio Basic と Add-In のC言語の言語の違いはあっても、LCD へのデータ転送がグラフィックス描画の処理速度を決めているわけです。

グラフィックス描画を速くしたい時は、LCD への転送回数を減らす工夫がポイントになることが分かります。



今回のまとめ

グラフィックス画面
  • グラフィックス コマンドの出力のためのグラフィックス画面とテキスト出力のためのテキスト画面があって、これらは別のもの。
  • グラフィックス コマンドとテキスト出力を1つの画面で行うことはできない。
  • グラフィックス画面は、全てのプログラムで共用される。
グラフィックス画面消去
  • グラフィックス画面消去には、ClrGraph コマンドを使う。
  • グラフィックス画面上の描画は、ClrText や Cls を実行しない限り、残っている。
デフォルト座標系
  • 座標系を指定しなければ、論理座標系が使われる。
グラフ設定コマンド
  • グラフ設定コマンドで、座標軸、グリッド、X, Y ラベル をグラフィックス画面の背景として On / Off する。
  • 座標値表示 On / Off は、Plot コマンドが入力待ちの時に有効になる(Plot コマンドと密接な関係)。
グラフィックの描画速度がコマンドによって異なる
  • fx-9860GII でも、コマンドによっては高速なグラフィックス出力が可能な場合がある。
  • グラフィックス描画データは、一旦VRAMへ送られ、さらにLCDへ転送されて描画が行われる。
  • グラフィクス描画は、主にLCD転送速度で決まる。
  • グラフィックス描画を速くするには、LCD転送回数を減らす工夫が有効になる。


今回使ったグラフィックス コマンド
  • ClrGraph
  • Horizontal
  • Vertical
  • CoordOn / CoordOff
  • GridOn / GridOff
  • AxesOn / AxesOff
  • LabelOn / LabelOff
  • ViewWindow
  • PlotOn
  • F-Line
  • SketchThick




つづく...

Casio Basic入門G03 / 目次




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


 



keywords: fx-9860GIICasioBasic、グラフィックス, プログラミング入門プログラム関数電卓

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


関連記事

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

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

やす (Krtyski)

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


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

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています。

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


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR