Casio Basic入門G04
Casio Basic入門
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
2015/07/18
2015/07/18
5. Casio Basic でグラフィックス
前回: Casio Basic入門G03
Chapter G04
Plot と Line
今回は、Plot コマンドを徹底的に解剖してみます。さらに Line コマンドにも触れます。
fx-9860GII の取扱説明書(fx-9860GII_Soft_J_2.04.pdf)の 8-24 ページには、
Plot <X座標値>,<Y座標値>
とだけ記載があります。ところが、これでは分からない色々な機能が隠されていることが分かったので、それを紹介します。
先ず以下のプログラムで、Plot コマンドを使って座標 (1, 0) に描画を試みます。実際に入力して実行してみてください。
ファイル名: PLOT2.1
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
Plot 1,0
Plot コマンドの前に、最初にグラフィックス画面の消去とグラフ設定を行っています。
- ClrGraph - グラフィックス画面消去、論理座標系に設定
- CoordOff - 座標値表示Off
- GridOff - グリッソ表示Off
- AxesOff - 座標軸表示Off
- LabelOff - 座標ラベル(X, Y)表示Off
さて、PlotOn 1,0 は、座標 (1, 0) に点を描画しますが、Plot 1,0 はどうでしょうか?
実際にプログラム PLOT2.1 を起動すると、

十字カーソルが現れました。十字カーソルの中央で点が点滅しています。
このカーソルは矢印キーで上下左右に移動できます。カーソルを移動させてみると、まだどこにも点が描画されていません。

Plot 1,0 は、座標 (1, 0) に点を描画せずに、カーソルを表示することが分かりました。
ここで、[EXE] を押すと、

テキスト画面に切り替わり、Done が表示されています。
ここで、裏に回っているグラフィックス画面を表示させるために、[SHIFT] [F6] (G↔T) を押すと、

移動したカーソルが見えます。
ここで、矢印キーでカーソルを動かしてみると、

カーソルがあった位置に点が描画されているのが分かります。
Plot 1,0 で自由に移動可能な十字カーソルが表示され、[EXE] を押すと、その時のカーソル位置に点を描画します。
Plot <x座標値>,<y座標値>
は、指定した座標に、点でなくてカーソル表示し、その後 [EXE] を押したら点を描画する、2段階の機能を持っていることが分かりました。
では、もう一度プログラム PLOT2.1 を起動し、
カーソルを移動
⇓
[EXE] を押す
⇓
[SHIFT] [F6] (G↔T) でグラフィック画面表示
⇓
カーソルを移動
⇓
・
・
・
を繰り返してみると、グラフィックス画面に次々と点を描画できます。
==========
では、上のプログラムの2行目を CoordOn に変更します。
ファイル名: PLOT2.2
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
Plot 1,0
これを起動すると、

最下行に、X座標値とY座標値が表示されています。
CoordOn を設定している時、Plot が実行されると座標値を表示します。PlotOn などの他のコマンドでは座標値を表示しません。CoordOn/Off は、Plot コマンド連動することが分かります。
矢印キーでカーソルを上下左右に移動してみると、

表示されている座標値もリアルタイムで変化します。
[EXE] を押すと、テキスト画面(Done 表示)になるので、

[SHIFT] [F6] でグラフィックス画面にし、カーソルを動かしてみると、

カーソルがあった位置に点が描画されていることが確認できました。X座標値とY座標値が表示されること以外は、最初のプログラム PLOT2.1 と同じです。
==========
[SHIFT] [F6] でいちいちグラフィックス画面を表示させるのは面倒なので、Plot 1,0 を連続的に実行させることにします。
ファイル名: PLOT2.3
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
While 1
Plot 1,0
WhileEnd
ここでは、While / WhileEnd ループを使います。While 1 とすると、ループ継続条件は常に「真」になるので、無限ループとなります。
⇒ Casio Basic コマンドリファレンス - While ~ WhileEnd
このプログラムを起動すると、

今度は、十字カーソルが表示されず、指定した座標 (1, 0) に点が描画されています。予期した動作とは異なります。
画面をよく見ると、画面の右上に ■(黒正方形のインジケータ)が点滅しています。これはプログラムが動作し続けていることを示しています。While ループがグルグル回り続けているので、このインジケータが表示されていると理解できます。
つまり、座標 (1, 0) に延々と点を描画し続けていることになります。この無限ループを止めるには、[AC] キーで強制終了します。

Plot 1,0 は、一旦停止すると座標 (1, 0) に十字カーソルが表示され、一旦停止しないと座標 (1, 0) に点を描画します。
最初のプログラムPLOT2.1 と PLOT2.2 は、プログラムの最後が Plot コマンドになっていて、ここで一旦停止していると理解すれば良いのです。
プログラムが終了するとグラフィックス画面はそのままで、テキスト画面に推移して、そこで一旦停止されます。これは、テキスト画面に表示された Done が見えることから分かります。
ここでさらに、[EXIT] や [AC] を押すと、プログラムが完全に終了して、Program List 画面に戻ります。これは Casio Basic の仕様です。この仕様のため、プログラム最後の Plot コマンドは一旦停止になっていたわけです。
そこで、一旦停止機能を持つ出力命令 ◢ を使って、Plot 1,0◢ として、一旦停止するようにプログラムを改造します。
ファイル名: PLOT2.4
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
While 1
Plot 1,0◢
WhileEnd
ここでは、一端停止機能を持つ出力命令 ◢ を利用し、十字カーソルを表示させて一端停止を行っています。
⇒ Casio Basic コマンドリファレンス - 出力命令 ◢
このプログラムを起動すると、

カーソルが表示され、矢印キーで自由に移動できます。好きな位置にカーソルを動かして [EXE] を押すと、点が描画されますが、カーソルに隠れているのでスグには点の描画が見えません。カーソルを移動して、点を確認してください。

繰り返して操作してみると、カーソルが必ず座標 (1, 0) に戻ります。Plot 1,0◢ が実行されるので、プログラム通りの動作ですね。
このプログラムが実行中に、[AC] や [EXIT] キーを押すとどうなるのか、調べて見ます。
[AC] を押すと、

このような表示をして強制終了します。
では、[EXIT] を押すと、どうなるのか?

テキスト画面に切り替わり、そこで Done と - Disp - が表示されています。
プログラムが 出力命令 ◢ で一旦停止している時、テキスト画面に - Disp - が表示されるのは、◢ 命令の仕様です。
プログラムは、一旦停止の状態なので、ここで [EXE] を押せば、プログラムが再び走り出します。[EXE] の代わりに、[AC] を押せば、強制終了します。
Casio Basic では、グラフィックス画面で終了する時は、テキスト画面に一旦遷移してから終了する仕様です。そして、グラフィックス描画を無限ループ内で行っている時、[EXIT] キーは、強制終了させるためのもう一つの迂回路になっています。
=====
もう一度 プログラム PLOT2.4 を見てください。
ここでは、変数が1つも使われていませんね。それを承知で、変数 X と Y を表示するコードを追加してみます。以下の赤文字のコードを追加して、プログラム PLOT2.5 に改造してください。
ファイル名: PLOT2.5
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
While 1
Plot 1,0◢
Text 1,1," " (スペース4個)
Text 7,1," " (スペース4個)
Text1,1,X
Text 7,1,Y
WhileEnd
(追加部分を赤文字で示す)
これを、プログラムファイル名 PLOT2.5 としておきます。
Text コマンドは、表示する文字の位置指定を物理座標で行うのでした。左上に X の値、その下に Y の値が表示されます。ループで何度も繰り返されるので、先にスペース4個で上書きして前回の表示を消去してから、新しい値を表示するようにしました。
このプログラム PLOT2.5 を起動すると、

座標 (1, 0) にカーソルが表示され、最下行に、カーソルの現在位置の座標値が表示されています。
While ループに入った最初は、Plot 1,0◢ でプログラムが一旦停止するので、その下にある Text コマンドがまだ実行されません。
カーソルを動かさずに、[EXE] を押してみます。

今回追加した Text コマンドによる表示が現れました。Plot 1,0◢ による一旦停止が解除され、その下にある Text コマンドが実行されたことが確認できました。この表示は、[EXE] を押した時のカーソルの座標 (X, Y) の X と Y が表示されてます。
次に、カーソルを自由に動かしてから [EXE] を押してみます。これを繰り返した結果、以下のようになりました。

最後に [EXE] を押した時のカーソル位置の座標値は、Text コマンドにより左上に表示されています。そして今十字カーソルがある位置は CoordOn による座表値と、一致しています。
このプログラムの重要な点は、変数 X や Y には何も代入していないのに、変数 X と Y には、[EXE] を押した時のカーソル位置の x座標値とy座標値が、自動的に代入されていることです。
この Plot コマンドの仕様はよく理解しておく必要があります。これは便利な使い方ができる反面、この仕様を知らないと、思わぬバグに悩まされることになるかも知れません。
==========
PLOT2.4 や PLOT2.5 では、[EXE] を押すたびに、カーソルが 座標 (1, 0) に戻ります。そこで、カーソルの位置を [EXE] が押された時の座標にとどめておくには、どうしたら良いでしょうか? 変数 X と Y を使うのがヒントです。
ファイル名: PLOT2.6
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
1→X:0→Y
While 1
Plot X,Y◢
Text 1,1," " (スペース4個)
Text 7,1," " (スペース4個)
Text 1,1,X
Text 7,1,Y
WhileEnd
変数 X と Y には、前回 [EXE] が押された時のカーソル座標 (X, Y) の値が入っています。そこで、Plot X,Y◢ とすれば、前回と同じ位置にカーソルが表示されるわけです。但し、While ループに入って最初の Plot X,Y◢ では、X と Y の値が確定していないので、座標系の表示範囲外の座標の可能性もあり、その場合はカーソルが表示されないので、プログラムが破綻します。そこで、While ループに入る前に、X と Y を初期化しておきます。それぞれの初期座標値を (1, 0) に併せて、それぞれ 1 (→X) と 0 (→Y) にしておきました。
PLOT2.6 を起動して、点を描画したい位置で [EXE] を押し、それを繰り返すと、以下のような画面になります。

このプログラムは、とても原始的なお絵かきツールとも言えますね。
==========
Text コマンドによる X座標値とY座標値の表示は、チョット味気ないので、表示を、x= -2.5 y= 1.7 といった感じに変更してみます。
ファイル名: PLOT2.7
ClrGraph
CoordOn
GridOff
AxesOff
LabelOff
0→X:0→Y
While 1
Plot X,Y◢
Text 1,1,"x= " (スペース4個)
Text 1,35,"y= " (スペース5個)
Text 1,10,X
Text 1,45,Y
WhileEnd
(変更、追加部分を赤文字で示した)
起動すると、カーソルは座標 (0, 0) つまり原点に表示されます。

While ループに入ったばかりで、Plot X,Y◢ で一旦停止しているので、Text コマンドによる表示は、まだ実行されていません。
カーソルを移動して、好きな位置で [EXE] を押して、点を描画してみます。

絵を見ずに、プログラムを見てくださいね(^^;)
以上、Plot コマンドのユニークな仕様をみてきました。
最後に、 Line コマンドを使ってみます。
fx-9860GII の取扱説明書(fx-9860GII_Soft_J_2.04.pdf)の 8-24 ページには、
Line ................パラメーターなし
とあります。これだけでは、使い方がよく分かりません。
直線を描く F-Line コマンドでは、線の両端の2つの座標(4つの値: x1, y1, x2, y2)をパラメータとして設定する必要がありますが、Line コマンドは Plot コマンドと併せて使うので、パラメータ設定が不要になります。
Line コマンド
・書式: Line
・Line の入力方法: [SHIFT] [F4] (Sketch) [F6] (▷) [F2] (LINE) [F1] (Line)
プログラム PLOT2.6 や PLOT2.7 では、現在のカーソル座標と [EXE] を押した時のカーソル座標 の2つの座標が内部的に管理されています。
[EXE] を押した時のカーソル座標は、変数 X と Y に自動的に代入されます。現在のカーソル座標は CoordOn にした時に座標が表示されることから、内部メモリで管理されていることが分かります。Line コマンドは、Plot コマンドで自動的に座標値が入力される X と Y、それに加えて現在のカーソル座標の座標値を使って、直線を描画します。
以下のプログラムで確認できます。
ファイル名: LINE
ClrGraph
CoordOn
GridOff
AxesOn
LabelOff
1→X:1→Y
While 1
Text 1,1,"x= " (スペース4個)
Text 1,35,"y= " (スペース5個)
Text 1,10,X
Text 1,45,Y
Plot X,Y◢
Line
WhileEnd
このプログラムを起動すると、

AxesOn にしているので、座標軸が表示されます。
X と Y は、それぞれ1で初期化しているので、起動時には座標 (1, 1) に十字カーソルが表示されています。左上には、変数 X と Y の値が表示されています。前のプログラム PLOT2.7 では、While ループに入ると、先ず Plot X,Y◢ を実行していましたが、今回は Text コマンンドを先に実行しています。従って、起動時にも Text コマンドによる座標値 X と Y が表示されます。
ここで、[EXE] を押してから、矢印キーでカーソルを適当に移動させます。そして、カーソルを移動したところで、[EXE] を押すと、

直線が描画されます。
言い換えれば、Line コマンドは、Plot コマンドと併用して、表示されるカーソルを [EXE] で位置決定した2点間に直線を描きます。
今回のまとめ
- Plot は、カーソルを指定座標へ表示し、[EXE] でカーソル位置に点を描画する。
- CoordOn / CoordOff は、Plot コマンドを使う時だけ有効になる。
- CoordOn の時、Plot で表示されるカーソルの座標値がリアルタイムで表示される。
- Plot コマンドは、一端停止するとカーソルを表示し、点を描画しない。]EXE] キーでカーソル位置に点を描画する。
- Plot コマンドに ◢ 命令を付加して一端停止している時に、プログラムを終了させると一旦テキスト画面に切り替わって一旦停止する。
- Plot コマンドでカーソルが表示され、[EXE] を押すと、カーソル座標 (X, Y) の数値が、X と Y に代入される。
- Line コマンドは、Plot コマンドと併用して、表示されるカーソルを [EXE] で位置決定した2点間に直線を描く。
今回使ったグラフィックス コマンド
- Plot
- CoordOn / CoordOff
- Text
- Line
つづく...
⇒ Casio Basic入門 G05 / 目次
応援クリックをお願いします。励みになるので...