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、グラフィックス, プログラミング入門プログラム関数電卓

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


関連記事

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

コメントの投稿

非公開コメント

ありがとうございます

sentaro様

> 予約変数 X,Yの正体を調べるプログラム、試してみました。
> X,Y変数が予約変数で、論理座標系に変換したときの座標 (X, Y) っていうのが一目瞭然ですね。

余所でも書きましたが、PxiOn を教えて貰って、真っ先に作ったプログラムです。
Casio Basicの手軽さは、こういうチョッとしたプログラムが簡単に、それも電卓本体さえあれば、できてしまう良さに繋がりますね。


> Horizontalが速いのはドット毎じゃなくライン毎にLCDアクセスになっているのがはっきり分かる結果です。

明かにそうですね。


> 今までグラフィックスコマンドはまともに使ったことがないので、管理人様の講座と共にいろいろと探っていきたいと思います(^^)

私もまだに手探り状態です。fx-5800P の時もそうですが、手探りでもやっていると、色々と分かってきて面白いです。

実際に、深掘りを始めることで、幾つかの実用プログラムも思いつきました。やはり触ってみることは大切ですね。

グラフィックス講座よいですね(^^)

管理人様、こんにちは!

予約変数 X,Yの正体を調べるプログラム、試してみました。
X,Y変数が予約変数で、論理座標系に変換したときの座標 (X, Y) っていうのが一目瞭然ですね。

Horizontalが速いのはドット毎じゃなくライン毎にLCDアクセスになっているのがはっきり分かる結果です。

今までグラフィックスコマンドはまともに使ったことがないので、管理人様の講座と共にいろいろと探っていきたいと思います(^^)
最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

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


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

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

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR