模様替え

2015/07/31 追記

皆様、いかがお過ごしでしょうか?

模様替えをしました。
あまり、頻繁な模様替えはどうかと思いますが、当ブログは開設してから1年9ヶ月になりますので、チョット気分を変えるのも良いだろうと思いました。

ちょっと広くなった感じがしませんか?
デザインの効果が大きいと思います。

  • 常に表示されるトップページ (e-Gadget Potal ページ) を、スッキリとさせました
    • 文章はリンク先へジャンプして読んで頂くようにしました。
    • 最新記事は、スグ右側に見やすい一覧があるので、トップページで最新記事をリストアップするのを止めました。

  • 最新記事のリストの下には、コメント一覧があります
    • 少しはコメントを探しやすくなったと思います。

  • コメント一覧の下には、カテゴリ一覧があります
    • カテゴリーも整理しました。これまでは、少しだけ分類で混乱していたので、この際すっきりと見直しました。カテゴリーから選びやすくしたつもりです。

  • プロフィールは、かなり下へ下げました
    • アクセスカウント 20,000、ページビュー 70,000 を超え、再訪問頂く率が一定数( 70% 以上)あるので(⇒こちら)、プロフィールの優先度は低いと思われます。

  • 記事本文中のリンクが見やすくなったと思います



[2015/07/31] 追記
併せて、スマホ向けページのデザインも見直して変更しました。



やす(Krtyski) 拝
関連記事

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

Casio Basic入門G03

Casio Basic入門
<目次>

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

修正 2015/07/30



 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 コマンで描画された点には適用されません。Plot コマンドは特殊で面白いコマンドなので、後で別に取り上げます。
ViewWindow 設定は、このコマンドで明示的に設定するか、あるいは ClrGraph を実行する以外は、設定は保存され、グラフィックス画面に反映されます。

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

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 では、このような仕様になっているようです。

==========

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

ファイル名: 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 の 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
CllrGraph
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 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ







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

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


関連記事

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

Casio Basic入門G02

Casio Basic入門
<目次>

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

訂正 2015/07/29



 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
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 (SH3)]
プログラム ファイル名描画時間 / 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 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ







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

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


関連記事

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

Casio Basic: Cls

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
訂正 2016/06/29



fx-5800P / fx-9860GII / fx-CG20
Cls

◆ 概 要: 全画面の表示を消去する。

◆ 書 式: Cls

◆ 引 数:なし

◆ 戻り値:なし


※ Clear Screen の略

fx-5800P と fx-9860GII ともに Cls コマンドが用意されていますが、その動作は異なる。

<fx-5800P >
Cls は画面全体を消去する。同時に内部カーソル行を1行目にリセットする。

<fx-9860GII OS2.04 / fx-CG20> [2015/07/29 訂正]
fx-9860GII の Cls は、グラフィックス画面の消去を行う。
fx-9860GII は、出力先にグラフィックス画面とテキスト画面の2つを持つ。
テキスト画面の消去には ClrText を使う。fx-5800P の Cls と同様に、テキスト画面の消去と同時に、内部カーソル行を1行目にリセットする。
グラフィックス画面の消去には、Cls  と ClrGraph が用意されていて、これらは動作の詳細が異なる。ClrGraph は単にグラフィックス画面の消去するだけでなく、座標系をデフォルトの論理座標に設定し、さらに目盛間隔を 1 に設定する。Cls は座標系や目盛間隔の設定変更を行わず、単にグラフィックス画面を消去する。



< fx-5800P の Cls と fx-9860GII/fx-CG20 の ClrText の動作 >
内部カーソル行リセットは、以下のプログラムから確認できる。

""
"LINE"◢
Cls
"LINE"◢


これを実行すると、"" により内部カーソル行は2行目になるので、2行目に

LINE

と表示され、プログラムが一時停止する。[EXE] キーでプログラムを再開すると、Cls が実行される際に内部カーソル行が1行目にリセットされる。従って、次は1行目に

LINE

と表示される。


< fx-9860GII/fx-CG20 の Cls の動作 >
以下のプログラムで、テキスト画面での Cls と ClrText のテスト、そしてグラフィックス画面での Cls のテストを行います。

Locate 1,2,"bra-bra-bra"
Locate 1,3,"Cls Test"
"Hit any number key"?→A
Cls
"Cls does NOT delete text."
"Press [EXE] key"◢
""
""
"Try ClrText test"
""
"bra-bra-bra"
"Hit [EXE] key"◢
ClrText
"It works!"
""
"Internal cursor reset back to the 1st line."
"Hit [EXE] key"◢

ViewWindow 0,126,0,0,62,0
PlotOn 10,10
Text 1,1,"Dot drawn by PlotOn 10,10"
Text 7,1,"Cls test"
Text 13,1,"Press [EXE]"◢
Cls
Text 1,1,"It works!"
Text 7,1,"Try again"◢
PlotOn 10,10
Text 13,1,"Dot drawn again at same position!"


テキスト画面では、Cls で消去できないこと、ClrText は消去と同時に内部カーソルが1行目にリセットされることが分かります。
さらに、グラフィックス画面で、Cls を実行すると、画面消去されますが、座標系設定の変更は行われないことが分かります。




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasicClsプログラミング入門プログラム関数電卓

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

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

楽屋裏 - プログラミング・スタイル?

楽屋裏 -
e-Gadget


2015/07/27

このタイトルを見て、何の話題だと思われましたか?

何か、作りたいプログラムがあって、アレとコレをこうやって、こんな感じで出来そう...とか、この部分はまだ作ったことが無いから、チョットやってみないと分からない...とか、最初は頭のなかでグルグル考えるわけです。

以前、Windowsプログラムを作っていたこともあります.
通信プログラムやWindows の内部を触るような用途のプログラムは主に Visual Cで作って、その他は殆ど Visual Basic です。Cで作るべきプログラムはCで作って、それ以外は楽な Visual Basic や Basic.net が作っていました。Active Basic というフリーの開発環境も使ったことがあります。

おっとぉ、開発が最も楽な開発環境として Casio Basic を忘れてはいけません

==========

さて皆様は Casio Basic のプログラムを作る時のスタイルは、どんなですか?

イスに座って、テーブルの上に電卓を置いて、入力しますか?
或いは、手で持って入力しますか?

私は、両手持ちで、左右の親指2本で入力のスタイルです(^^;)
fx-5800P でも fx-9860GII でも同じスタイル。

そして、通勤電車、新幹線、飛行機内...どこでもプログラミングが、私のスタイル。
電卓プログラミングでなければ、できないと思います。






応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ


keywords: プログラム関数電卓fx-5800Pfx-9860GII、Casio Basic

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

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

Casio Basic入門G05

Casio Basic入門
<目次>

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

2015/07/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 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ








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

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


関連記事

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

TRON


2015/07/23


新しいプログラム電卓に関して、雑談している (ここ) 時に、ふと思い出したのが TRON という国産OSです。TRONをプログラム電卓に使えば、面白いのではないかと思いました。

かなり前のことになりますが、TRON プロジェクトの中で BTRON というのがあって、パソコンで使ったこと(お試し程度)がありますがが、OSが 1MB 以内に収まるほどコンパクトなのに、ウィンドウシステムができてしまうのに、驚きました。

改めて、TRON は今どうなっているのか?と検索してみたら、既に色々な製品に使われていて、イトカワへ行って戻ってきた「はやぶさ」の次の「はやぶさ2」にも搭載されていて、開発者自身がまだ夢をもって将来のインフラへの応用を考えていることなど、が紹介されていました。

「社会は、技術だけでは変わらない」国産OS『TRON』を生んだ賢人、イノベーションを語る【連載:匠たちの視点-坂村健】

再び脚光を浴びる国産アーキテクチャ「TRON」 - 坂村節がきわ立った「2014 TRON Symposium」記者会見より

ちなみに、Wiki でも説明があります。



カシオが国産OSであるTRONを採用して開発しないものでしょうか?




応援クリックをお願いします。励みになるので...

人気ブログランキングへ





 



keywords: プログラム関数電卓

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


関連記事

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

Casio Basic入門G04

Casio Basic入門
<目次>

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

2015/07/18



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


前回: Casio Basic入門G03


Chapter G04
Plot コマンド

今回は、Plot コマンドを徹底的に解剖してみます。

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
ここで、2行目が CoordOff になっていることに注意してください。

さて、PlotOn 1,0 は、座標 (1, 0) に点を描画しますが、Plot 1,0 はどうでしょうか?

実際にプログラム PLOT2.1 を起動すると、

PLOT2-1-1 

十字カーソルが現れました。十字カーソルの中央で点が点滅しています。

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

PLOT2-1-2 

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

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

PLOT2-1-3 

テキスト画面に切り替わり、Done が表示されています。

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

PLOT2-1-2 

移動したカーソルが見えます。

ここで、矢印キーでカーソルを動かしてみると、

PLOT2-1-4 

カーソルがあった位置に点が描画されているのが分かります。

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


これを起動すると、

PLOT2-2-1 

最下行に、X座標値とY座標値が表示されています。

CoordOn を設定している時、Plot が実行されると座標値を表示します。PlotOn などの他のコマンドでは座標値を表示しません。CoordOn/Off は、Plot コマンド連動することが分かります。

矢印キーでカーソルを上下左右に移動してみると、

PLOT2-2-2 

表示されている座標値もリアルタイムで変化します。

[EXE] を押すと、テキスト画面(Done 表示)になるので、

PLOT2-1-3 

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

PLOT2-2-3 

カーソルがあった位置に点が描画されていることが確認できました。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

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

PLOT2-3-1 

今度は、十字カーソルが表示されず、指定した座標 (1, 0) に点が描画されています。予期した動作とは異なります。

画面をよく見ると、画面の右上に (黒正方形のインジケータ)が点滅しています。これはプログラムが動作し続けていることを示しています。While ループがグルグル回り続けているので、このインジケータが表示されていると理解できます。

つまり、座標 (1, 0) に延々と点を描画し続けていることになります。この無限ループを止めるには、[AC] キーで強制終了します。

PLOT2-3-2 


Plot 1,0  は、一旦停止すると座標 (1, 0) に十字カーソルが表示され、一旦停止しないと座標 (1, 0) に点を描画します。

最初のプログラムPLOT2.1PLOT2.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 コマンドリファレンス - 出力命令


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

PLOT2-4-1 

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

PLOT2-4-2

繰り返して操作してみると、カーソルが必ず座標 (1, 0) に戻ります。Plot 1,0◢ が実行されるので、プログラム通りの動作ですね。


このプログラムが実行中に、[AC] や [EXIT] キーを押すとどうなるのか、調べて見ます。

[AC] を押すと、

PLOT2-3-2 

このような表示をして強制終了します。

では、[EXIT] を押すと、どうなるのか?

PLOT2-4-3 

テキスト画面に切り替わり、そこで 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 を起動すると、

PLOT2-5-1 

座標 (1, 0) にカーソルが表示され、最下行に、カーソルの現在位置の座標値が表示されています。

While ループに入った最初は、Plot 1,0◢ でプログラムが一旦停止するので、その下にある Text コマンドがまだ実行されません。

カーソルを動かさずに、[EXE] を押してみます。

PLOT2-5-2 

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

次に、カーソルを自由に動かしてから [EXE] を押してみます。これを繰り返した結果、以下のようになりました。

PLOT2-5-4 

最後に [EXE] を押した時のカーソル位置の座標値は、Text コマンドにより左上に表示されています。そして今十字カーソルがある位置は CoordOn による座表値と、一致しています。

このプログラムの重要な点は、変数 XY には何も代入していないのに、変数 XY には、[EXE] を押した時のカーソル位置の x座標値とy座標値が、自動的に代入されていることです。

この Plot コマンドの仕様はよく理解しておく必要があります。これは便利な使い方ができる反面、この仕様を知らないと、思わぬバグに悩まされることになるかも知れません

==========


PLOT2.4 や PLOT2.5 では、[EXE] を押すたびに、カーソルが 座標 (1, 0) に戻ります。そこで、カーソルの位置を [EXE] が押された時の座標にとどめておくには、どうしたら良いでしょうか? 変数 XY を使うのがヒントです。


ファイル名: 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


変数 XY には、前回 [EXE] が押された時のカーソル座標 (X, Y) の値が入っています。そこで、Plot X,Y◢ とすれば、前回と同じ位置にカーソルが表示されるわけです。但し、While ループに入って最初の Plot X,Y◢ では、X と Y の値が確定していないので、座標系の表示範囲外の座標の可能性もあり、その場合はカーソルが表示されないので、プログラムが破綻します。そこで、While ループに入る前に、XY を初期化しておきます。それぞれの初期座標値を (1, 0) に併せて、それぞれ 1 (→X)0 (→Y) にしておきました。

PLOT2.6 を起動して、点を描画したい位置で [EXE] を押し、それを繰り返すと、以下のような画面になります。

PLOT2-6-1 

このプログラムは、とても原始的なお絵かきツールとも言えますね。

==========


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=   "  (スペース個)
Text 1,10,X
Text 1,45,Y

WhileEnd


(変更、追加部分を赤文字で示した)

起動すると、カーソルは座標 (0, 0) つまり原点に表示されます。

PLOT2-7-1 

While ループに入ったばかりで、Plot X,Y◢ で一旦停止しているので、Text コマンドによる表示は、まだ実行されていません。

カーソルを移動して、好きな位置で [EXE] を押して、点を描画してみます。

PLOT2-7-2 

絵を見ずに、プログラムを見てくださいね(^^;)


以上、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.6PLOT2.7 では、現在のカーソル座標と [EXE] を押した時のカーソル座標 の2つの座標が内部的に管理されています。

[EXE] を押した時のカーソル座標は、変数 XY に自動的に代入されます。現在のカーソル座標は CoordOn にした時に座標が表示されることから、内部メモリで管理されていることが分かります。Line コマンドは、Plot コマンドで自動的に座標値が入力される XY、それに加えて現在のカーソル座標の座標値を使って、直線を描画します。

以下のプログラムで確認できます。

ファイル名: 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


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

Line1 

AxesOn にしているので、座標軸が表示されます。

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

ここで、[EXE] を押してから、矢印キーでカーソルを適当に移動させます。そして、カーソルを移動したところで、[EXE] を押すと、

Line3 

直線が描画されます。

言い換えれば、Line コマンドは、Plot コマンドと併用して、表示されるカーソルを [EXE] で位置決定した2点間に直線を描きます。




今回のまとめ
  • Plot は、カーソルを指定座標へ表示し、[EXE] でカーソル位置に点を描画する。
  • CoordOn / CoordOff は、Plot コマンドを使う時だけ有効になる。
  • CoordOn の時、Plot で表示されるカーソルの座標値がリアルタイムで表示される。
  • Plot コマンドは、一端停止するとカーソルを表示し、点を描画しない。]EXE] キーでカーソル位置に点を描画する。
  • Plot コマンドに 命令を付加して一端停止している時に、プログラムを終了させると一旦テキスト画面に切り替わって一旦停止する。
  • Plot コマンドでカーソルが表示され、[EXE] を押すと、カーソル座標 (X, Y) の数値が、XY に代入される。
  • Line コマンドは、Plot コマンドと併用して、表示されるカーソルを [EXE] で位置決定した2点間に直線を描く。


今回使ったグラフィックス コマンド
  • Plot
  • CoordOn / CoordOff
  • Text
  • Line




つづく...

Casio Basic入門 G05 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ







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

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


関連記事

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

番外編 - モバイル通信 P201から305ZTまで

番外編 - モバイル通信
e-Gadget

2015/07/18

私は、かなり年期の入ったモバイラーでした。最近は普通のユーザーですが...

ドコモの携帯電話 201P (こんな型式知らない人が殆どでしょう)で 9600bps で通信したのが始まり。

その後、PHSの方がデータ通信が速い時代があり、DDIポケットの端末で通信を始めました。その頃、NTTのPHS (NTTパーソナルというPHS会社のパルディオという製品ラインアップがありました)で 64Kbps 通信が始まる前の試験に参加したりしました。確かPIAFS 2.0と言う通信規格で 64Kbps でした。PHS は NTTパーソナルからNTTドコモへ事業移管され、しばらくドコモは PHSと携帯の両方をやっていましたが、この頃はギャランティー接続といって、その通信速度を保証するというもので、現在のベストエフォートとは異なるものでした。

当時のNTTパーソナルから、通信カードや通信カード内蔵のPHS電話機などが出ていました。通信カード内蔵タイプは、2つ折りタイプの携帯電話のような恰好で、PHS電話機のフリップ部分のケースを外して、パソコンのPCMCIAカードスロットに刺して使うといったスタイルでした。4~5台の PHS端末を乗り換えて使っていましたが、詳しくは忘れてしまいました。

ギャランティー接続のPIAFS 2.0 から、ベストエフォート接続の PIAFS 2.1 が登場して、DDIポケットがPHSの高速パケット通信サービス Air H" (エア エッジ)を始め、それからしばらくは、データ通信に H" を使っていたことがあります。それでも 128Kbps ~ 512Kpbs という通信速度でした。

いずれにせよ、長らく通話は携帯電話、通信はPHS のパケット通信と言う感覚でした。1990年代~2000年台初頭の頃です。


そのDDIポケットがウィルコム(Willcom)に変わり、NTTドコモがPHSを止めました。そうこうするうちに E-Mobileが高速パケット通信サービスを始めたので、それに乗り換えました。

サービス開始当時の E-Mobile は、端末に色々と問題がありましたが(例えば、D01NXと言うコンパクトフラッシュサイズの通信カードが熱暴走して通信が不安定になるなど、きちんと実験データを添えて端末不良を証明した上で、2年縛りの違約金無しで、別端末に無償で切り替えて貰うなどといったこともありました)、通信品質そのものは極めて良好で、常に高速通信ができる快適なものでした。

通信端末のみで言えば、おおよそ以下のようなものを使ってきました。

Willcom
AH-S405C
AX510N

Emobile
D01NX
D01NE
D21NE
D22HW
Pocket Wi-Fi D25HW
Pocket Wi-Fi GP02

GP02 と言う端末を使っていた時は、高品質でかなり快適な通信が実現されていました。バケット使用量に応じた速度制限など有りませんでした。

快適で高品質なE-Mobileネットワークも、Softbank と提携するようになる頃から、通信サービスの品質に暗雲が立ちこめてきました。

その後、GL09P と言う端末に変更するあたり(今からおよそ2年前)から、通信速度制限が現実の問題となってきました。GL09P では、当初は3日間で 2GB を使うと帯域制御による通信速度制限がかかりましたが、今では3日間で半分の1GB で帯域制御の対象です。実際に、128Kbps程度になってしまった経験もありますが、殆どは数百MBは確保されていました。

もっとも、私自身の通信端末の使い方は、動画閲覧などのヘビーな使い方は殆どなく、実害は殆ど有りません。

一応かなり調べてから納得して契約するので、今のところ契約のトラブルは在りません。(Yahoo! BB の代理店が承諾なく勝手にADSLを引こうとする事故には遭ったことがありますが、ソフトバンクにキチンと対応してもらいました。)

それに、事業者本体のカスタマーサポートとのトラブルを避ける秘訣もあります(後述)。


E-Mobile/Softbank
Pocket Wi-Fi GL09P

この GL09P は、4つのネットワークに対応していて、ユーザーが回線を選択することはできず、自動的に回線を選ぶので、自動で(勝手に)回線が切り替わると、通信が一旦切れたり復帰に手間取るといったこともありました。最近ではそのようなことは殆どなくなっています。おそらくG4回線ネットワークの容量と安定性が増してきたのではないかと想像しています。帯域制御も寄与しているかもしれません。

東京メトロの地下鉄内では、LETで繋がって、そのまま回線を繋いだままにしておくと、G4で繋がるはずの地上に出ても回線が切り替わらずにLETのまま繋がるといったこともあったりして、裏技的な使い方を見つけて楽しんだものです。


カスタマーサポートの重要性

以前のE-Mobile のカスタマーサポートは、素晴らしいものでした。嫌な気分になったことが過去に一度もありません。こちらの知りたいこと分からないことを、先回りして懇切丁寧に説明してくれたので、いまだに良い印象が残っています。

但し、最近はどうも自社サービスの知識が足りなくて、論理的な日本語が通じず、自分の都合でしか物を言わないタイプの担当者が増えてきているように感じています。

カスタマーサポートと言う業務は、なかなかストレスのたまる大変な仕事で、お客様から担当を変えてくれと言われない限り、その案件をサポートしなければならない規則になっていることを、以前 E-Mobile の親切な担当者から教えて貰いました。なので、ダメと思ったら、担当を変えろと、是非言ってください。それが双方にとってベストなんだ、と聞きました。

そこで、最近では「この担当では話しにならない」と思ったら、お互い気まずくなる前に、話しの分かる人に変わってくれと伝えるようにしていて、これはとてもうまくゆきます。腹を立てても、無駄なエネルギーを使ってお腹が減るだけで、何も良いことはありませんから...

そして、昔のE-Mobile品質のカスタマーサポートの担当者から電話を頂き、話しがスムーズに進みます。是非お試しください。契約更新などでSoftbank系列(E-MobileやYmobileも含む)で、諸費者センターの苦情のトップに来ていたり、ネットでの炎上をよく目にしますが、私の中では E-Mobile の好印象がいまだに根強く残っています。

カスタマーサポートと仲良くなると、色々なことを教えて貰えます。けんか腰は百害あって一利なしですね。


キャリア乗り換え検討

この8月が、E-Mobile 契約の更新月になるので、速度制限がかからないと言われる WiMaxへの乗り換えを考えました。

実は1年ほど前、Try WiMax というお試しの貸し出しサービス(無償)を利用して、沖縄、大阪、名古屋、滋賀、岐阜、栃木と、色々なところで試してみる機会がありました。意外に繋がらないことが多くて、E-Mobileの方が、繋がりやすさが良いという印象を持ちました。

ベストエフォートですが、最大通信速度については、WiMaxが160Mbps、Ymobileが165Mbpsと良い勝負をしています(端末と契約によります)。双方とも、エリア拡大が始まったところで、まだ一部でしか受けられないサービスです。互いに競争状態なので、今後が楽しみです。

そうこうするうちに、Ymobileから電話があって、更新を1月早めて、165Mbpsが可能な端末への変更と、1ケ月7Mbpsでの速度制限が実質ないキャンペーン契約(2年間)を勧められました。キャンペーンは7/14で終了とのことでした。そこで本腰を入れて、色々調べてみました。

Y! Mobile で最も留意すべきは、2種類の速度制限です。

[条件1」: 3日間で1GB を超えること
[条件2]: 1ケ月で7GBを超えること

Ymobile では、7/14までのキャンペーンで、端末に 305ZT を使ったPocket Wi-Fi プラン+(にねん)契約だと、[条件2] の7BG制限は実質なしでした。私のこれまでの使い方では、3日で 1GB もあまり問題がありません。これが問題になる人は、WiMaxにすべきです。
キャンペーンによる費用面は、それまでと殆ど同じです。今余計なオプションを付けているので、それを解約すればさらにコストは下がります。

一方、過去の Try WiMax での繋がりにくさの経験があるので、もう一度確認する必要がありましたが、その時間がありませんでした。

ところが、今回 Ymobile で担当者変えろ作戦で、良い担当者に当たったこともあって、取りあえず、2年間は Ymobile で継続することにしました。

なお、Ymobileは、E-Mobile時代に比べて、通信回線品質は低下していて、担当者のレベルも確実に低下していますので、2年後は、事前にWiMaxの繋がりやすさの再調査や、できれば実際に試してみて、本気度100%で乗り換え検討をしようと思っています。

最近ネットで、無償解約に成功した事例が多くみますが、私個人的には、これらの事例と主張には与しません。契約の問題は、販売代理店や販売窓口の問題であって、通信サービス自体とは別の話だと、切り分けて見ています。契約問題に関して言えば、WiMax の au も似たような問題を抱えています。Ymobile = SoftBbank 本体は、今のところ柔軟に対応していると感じています。


Ymobile
Pocket Wi-Fi 305ZT

とりあえず、これまでのところ GL09P に比べて、総じてより快適です。AXGP, LTE, 3G の3回線を自動ですが選択できて、さらにキャリアアグリゲーションも使えるという特徴がありますが、実際には使えてナンボの世界です。

回線速度テストは、いつも  Radish - Network Speed Test でやっていますが、今回もテストしてみました。

下り: 35~100 Mbps
上り: 8~9Mbps

GL09P では下りはせいぜい 50Mbps だったので、305ZT のキャリアアグリゲーションの効果は見られます。これは G4 回線の搬送波を複数束ねて回線速度を上げる方法で、305ZT が対応しています。この方式で 最高160Mbps となっています。au (WiMax) との競争が今後どのように推移するのか、注視してゆきたいと思います。



以上、備忘録の意味でブログに残します。




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ


keywords: モバイル通信、305ZT、通信端末、Y!mobile

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

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

キリ番

2015/07/14
2015/07/17 追記

いきなり暑くなり、水摂取量が突如として増えている管理人でごございます。

子供の頃は、夏休みの朝は、涼しかったのですが、今朝は早朝からもう暑い。地球はやはり壊れかけているのでしょうか?
そのようななか、皆様、如何お過ごしでしょうか?

突然ですが、アクセスカウンターがもうすぐ 20,000 になろうとしております。キリ番は今月中に到達確実で、来週か再来週かも知れません。

Casio Basic 中心に、殆どが fx-5800P と一部 fx-9860GII というプログラム電卓に絞ったブログにも関わらず、何度もお越しくださる方が、少しずつですが増えているように思います。応援メッセージを頂くこともございます。

ここまでこれたのも、読んでやろうと思ってくださる皆様のおかげです。
ありがとうございます。

キリ番を踏まれるのは、どなたでしょうか?


[2015/07/17 追記]

1日で1回以上アクセス頂いた方の合計数が 20,000 を超えました。20,000 になったのは、2015/07/17 3am ~ 4am にアクセス頂いた方です。ありがとうございます。

当ブログ開設後約1年9ヶ月です。ちなみに、トータルアクセス数 (いわゆるページビュー, PV)は、70,000 を超えました。
ブログとしては、大したことない数ですが、70% 以上の方が再訪問頂いています。

Access201507Update 

青線と赤線の違いが再訪問率を示していますので、一定の割合で再訪問頂いていることが分かります。

アフィリエイトで稼ぐことなど全く考えていませんので、再訪問頂ける方の多いことが最大の喜びです。

改めて皆様にお礼を申し上げます。


やす(Krtyski) 拝
関連記事

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

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

やす (Krtyski)

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


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

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

おもしろい・役に立つならクリックしてください。励みになります。
にほんブログ村 IT技術ブログ 開発言語へ
にほんブログ村


人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR