Casio Basic入門
誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
2015/11/03
修正 2016/11/03
5. Casio Basic でグラフィックス前回:
Casio Basic入門G13Chapter G14PxlTest コマンド
前回
ViewWindow による座標系設定で動作確認した以下のグラフィックス描画を行うコマンドは、
[SHIFT] [F4] (Sketch) に続くメニューの中にあり、これらを
Sketch描画コマンドと呼ぶことにします。
- Plot
- PlotOn
- PlotOff
- PlotChg
- Line
- F-Line
- Circle
- Vertical
- Horizontal
- Text
- PxlOn
- PxlOff
- PxlChg
- PxlTest( )
今回は、
PxlTest() について、詳細動作を調べます。
PxlTest( ) コマンドfx-9860GII Ver 2.04 のソフトウェアマニュアル の 8-24 ページには、以下の
PxlTest( ) コマンドの説明があります。
PxlTest(<行番号>,<列番号>[)]説明はこれだけです。
何をするコマンドか分かりません。行番号は縦方向、列番号は横方向ですが、これだけでは、原点がどこにあるか分かりません。
PxlTest() コマンドは、物理座標系で位置を設定し、その位置のピクセルが On なら 1 を返し、Off なら 0 を返します。値を返すとは、
PxlTest() がその値を持つと考えて良いでしょう。
原点は、左上で (1, 1) です。このコマンドを記述すると、例えば、
PxlTest(x,y)となり、
x は縦方向、
y は横方向の位置です。
殆どのコマンドでは、
x を横方向の座標値、
y を縦方向の座標値にするので、違和感があり、要注意です。多くのコマンドでは 横方向の座標置が1つめのパラメータに来るのですが、
PxlTest() の1つめのパラメータは縦方向の座標置であり、2つめのパラメータが横方向の座標置なので、違和感があります。仕様なので、しかたありません。
Casio Basic の物理座標系で使うコマンドは全てこのように、縦と横が逆転します。
物理座標系で位置を設定するコマンドは、
PxlTest() 以外も全てこのようになります。既に使ってきている
Text コマンドも同様です。
さて実際に
PxlTest(X,Y) と、1行だけのプログラムを書いて、実行するとエラーになります。
PxlTest( の入力方法:
[SHIFT] [F4] (Sketch) [F6] (▷) [F6] (▷) [F4] (Test)
変数 Y に 1 ~ 63 以外の整数、変数 X に 1 ~ 127 以外の整数が格納されていると、
Argument ERROR となります。
PxlTest() を使う際には、変数 X と Y の初期値に留意する必要があり、必要に応じてエラーが出ないように初期化する必要があります。
PxlTest() コマンドを使う時、変数
X と
Y は、描画した点の位置をデフォルトの論理座標系に換算した座標
(X, Y) の値に自動的に更新されることが確認できます。
例えは、
PxlTest(A,B) を実行すると、物理座標系での点(B, A) のピクセルが On か Off をを調べ 、この位置がデフォルトの論理座標系へ変換された座標 (X, Y) へ自動計算され、X と Y がその値で自動的に更新されるわけです。そして、変数 X と Y は使う際には要注意の予約変数とになります。バグ回避のために使わないほうが無難かも知れません。
PxlTest() の動作を確認するため、以下のように点線を3本描いて、ピクセルが交互に On と Off になる状態を作り、それぞれのピクセル位置で
PxlTest() を実行して、ピクセルが On なら
PxlOff でピクセルを消し、Off なら
PxlOn でピクセルを描くようにしてみます。動作の結果は
PxlChg と同じになるはずです。
この準備には、
PxlOn を使うことにします。
PxlChg の動作確認で全く同じ準備をしています。
⇒
Casio Basic入門G13 - PxlChg コマンドClrGraph
CoordOff
GridOff
AxesOff
LabelOff
Text 1,1,"PxlOn"
For 31→A To 33
For 1→B To 127
MOD(A+B,2)⇒PxlOn A,B
Next
Nextここで
MOD 関数は
A+B を 2 で割った時の余りが 1 の時のみ
PxlOn A,B を実行するように使います。こうすることで、交互にピクセルを On にできます。
F-Line コマンドを使ってピクセルを交互に On にする方法は、以下で紹介しています。
⇒
Casio Basic入門G07この方法でも良いのですが、今回は別の方法を紹介しました。
For 文が2重になっていますが、内側のFor 文では、A 行を左から右へ (B が 1 から 127 まで) 交互に点を描いています。外側は、A 行の A を 31 から 33 まで順に変化させています。
先ず、A が 31 になって、内側の For 文(内側の For と Next の間) が B が 1 から 127 になるまで、B の値を 1 づつ増やしながら繰り返します。内側の For 文が終わったら、外側の For 文で A を 1 増やして (A=32)、もう一度内側の For 文が繰り返しを行い、これが終わったら再度外側の For 文で A を 1 増やして (A=33) さらに内側の For 文が同じように繰り返しを行います。これが終わって外側の For 文に戻るわけですが、A が 33 まで繰り返すように書いてあるので、これ以上の繰り返しを行わずに、外側の Next へジャンプし、プログラムが終わります。
⇒
Casio Basicコマンドリファレンス: For 文
これで、準備が終わったので、
PxlTest() の動作を確認するために以下のプログラムに仕上げます。
ファイル名: PXLTEST1ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
Text 1,1,"PxlOn"
For 31→A To 33
For 1→B To 127
MOD(A+B,2)⇒PxlOn A,B
Next
Next
Text 1,1,"PxlTest()=1 =⇒ PxlOff"
Text 7,1,"PxlTest()=0 =⇒ PxlOn"
Text 13,1,"X="
Text 19,1,"Y="
Text 45,1,"Hit Any Key: Do PxlTest()"
0→X:0→Y
For 31→A To 33
For 1→B To 127
If PxlTest(A,B)
Then PxlOff A,B
Else PxlOn A,B
IfEnd
Text 13,10,X
Text 19,10,Y
While Getkey=0
WhileEnd
Text 13,10," " (スペース4個)
Text 19,10," " (スペース4個)
Next
Next
ダウンロード:
PXLTEST1 青文字で示した2行の
While ループは、何かキーが入力されるまでプログラムを一旦停止する働きをします。
よく使う方法なので、逆引き Casio Basic にも掲載しました。
⇒
キー押下でプログラムをコントロールしたい - 逆引き Casio Basicプログラムを一旦停止するには、
◢ 命令を使う方法もあり、これは簡単な方法です。一旦停止を解除するには
[EXE] キーを押します。但し、今回のプログラムでは、プログラムを進めるには
[EXE} キーを連打し続ける必要があり大変です。一方、上の方法だと 何かキー([AC] キー以外)を押し続けるだけでプログラムは進むので格段に操作が楽になるので、この方法を紹介しています。
For 文については、準備で
PxlOn による点描画を行ったのと全く同じなので、ここでは割愛します。
赤文字で示したこのプログラムの
肝心な部分では、
PxlTest() を実行し、1 を返す(
PxlTest() の値が 1)の時、If 文で分岐して
PxlOff を実行し、そうでない(
PxlTest() が 0を返す場合は、
PxlOff を実行します。その後に 変数 X と Y の値を確認しています。
PxlTest(A,B) が物理座標のピクセル(A, B) の On か Off かを調べると同時に、この物理座標をデフォルトの論理座標系に変換した座標 (X, Y) を、変数 X と Y に自動的に代入します。つまり、物理座標系の (A, B) がデフォルトの論理座標系の (X, Y) に自動変換されるわけです。
では、プログラムを実行してみます。
このプログラムを起動すると、先ずは
PxlOn でピクセルが交互に On になるように点線を3行描画します。
これは2行目を描画しているところです。描画は続きます。
3行目の描画がほぼ終わったところです。3行の範囲でピクセルが交互に On になっているのが分かります。
準備が完全に終わると、以下の表示でプログラムが一旦停止します。
1行目の左端は、既に
PxlTest() で Off だったピクセルが On になっているのがわかります。上のプログラムでは、
PxlTest() を1回実行して、0 を返して
PxlOn を実行した直後、プログラムが
While ループに入って、それが回り続けるため、そこから先へプログラムが進みません(止まっているように見えます)。
では、何かキー(但し [AC] キー以外)を短く押すと
PxlTest() が1回づつ実行され、同時に X と Y の値が表示されます。
1行目の中央まで進んだところが下の画面です。
交互に On になっていたピクセルの On と Off が切り替わっていることが一目瞭然です。そして、X=0、Y=0.1 となっていて、デフォルトの論理座標系での値になっていることが確認できます。
さらに、何かキーを押します。押し続けるとプログラムは進むので、しばらく押し続けてみてください。
3行目まで進みました。X と Y の値もデフォルトの論理座標系に従っていることが分かります。
3行目の右端のピクセルで
PxlTest() が実行され、そのときの X と Y の値が表示されたところです。
このプログラムを実行することで、
PxlTest(A,B) では、パラメータに物理座標系の位置を示す A と B を使っていますが、Xデフォルトの論理座標系での座標値 (X, Y) の値が自動的に更新されることが確認できました。
PxlTest() を使う時は、変数 X と Y の値が勝手に変更されることに留意し、プログラムを書く必要があります。
ピクセルの On / Off を調べるコマンドは、物理座標系で使う
PxlTest() しかありません。従って、ピクセルの On / Off を調べたい時は、物理座標系からデフォルトの論理座標系への自動変換をする機能を正しく理解して、利用する必要があります。
次に、
PxlTest() は、ピクセルの On / Off を調べた結果、1 か 0 の値を返すことを確認してみる。値を返すというのは、そのコマンドがその値を持つと考えても良いでしょう。
この機能を確かめるために、次のようなプログラムを作ってみます。
ファイル名: PXLTEST2ClrGraph
CoordOff
GridOff
AxesOff
LabelOff
SketchDot Horizontal 0
Text 1,1,"PxlTest()="
Text 45,1,"EXE: Check next value."
32→A
For 1→B To 127
B-1⇒PxlOff 34,B-1
PxlOn 34,B
Text 1,45,PxlTest(A,B)◢
Nextダウンロード:
PXLTEST2このプログラムの1つ目のブロックはフラフィックス設定で、特に説明は不要でしょう。
2つ目のブロックで、水平の点線を描いて、画面への文字表示を行っています。
SketchDot と
Hiorizontal コマンドの使い方は、以下を参照。
⇒
Casio Basic入門G073つ目のブロックが、今回の確認のための主要部分です。既に描かれた点線を左から1ピクセルごとに PxlTest(A,B) でピクセルの On/Off をテストします。
Text コマンドの3つ目のパラメータに、直接
PxlTest(A,B) を記述しています。
PxlTest() が値を返すので、このような記述が可能になります。
Text 1,45,PxlTest(A,B)◢これを表示したら、一旦停止させるため、
◢ 命令を使っています。
点線の水平線は、物理座標系で上から32ピクセルにあるので、A は常に 32 です。従って、
32→A としています。
横方向は、変数 B を 1 から 127 まで1づつ増やして、For 文で繰り返し処理を行っています。
つまり、上の
Text コマンドの3つめのパラメータの
PxlTest(A,B) は、
PxlTest(32,B) と全く同じです。
ところで、赤文字出示した2行は、今どのピクセルをテストしているのかを示すために追加しています。
今テストしているピクセル (32, B) の2ピクセル下に、点を描画するので、
PxlOn 34,Bとなります。
但し、この点を描画する前に、1つ前の点を
PxlOff で消します。
PxlOff 34,B-1
と書けば良いのですが、1つ問題があります。
一番最初は、B が 1 です。この時 B-1 は 0 になります。すると、
PxlOff 34,B-1 の2つめのパラメータが 0 になりますが、
PxlOff の仕様上、パラメータが 1 ~ 127 以外だとエラーになります。そこで、最初だけは
PxlOff を実行させないため、
B-1⇒PxlOff 34,B-1としています。
B-1 が 0 以外なら「真」なので、⇒ 命令の右を実行します。
一番最初は、B = 1 なので、B-1 は 0 となり「偽」となるので、⇒命令は、すぐ次のコマンドを実行せず飛ばします。
Casio Basic コマンドリファレンス: ⇒命令従って、
B-1⇒PxlOff 34,B-1
PxlOn 34,B
Text 1,45,PxlTest(A,B)◢となります。
では、このプログラムを実行してみます。
プログラムを起動すると、
点線の水平線が描画され、1つめのピクセルがテストされ、テスト結果が 1 と表示されています (
PxlTest()= 1 と表示)。テストしている一番左のピクセルの下に、点が1個表示されていることも確認できます。
[EXE] を何回か押すと、
今テストしているピクセルは、Off になっていて、テスト結果は、0 になっています。
[EXE] を1回押すと、
点は1ピクセル右へ移動してテストしているピクセルを示し、それは On になっていて、テスト結果も 1 (
Pxltest() = 1) になっています。
さらに、
[EXE] を何回か押して、
ピクセルが Off のところのテスト結果は、0 になっています。
[EXE] を1回押して、テストするピクセルを1つ右へ移動すると、
ピクセルが On になっていて、テスト結果が 1 になっています。
これで、
PxlTest() は、ピクセルのテスト結果を 1 か 0 で示す、その値を返すことが確認されました。この「値を返す」機能を使えば、
PxlTest() コマンドを変数のように使えることも分かりました。
PxlTest( )書式:
PxlTest(A,B)- パラメータ A と B で指定された位置のピクセルが On か Off かをテストする。
- パラメータ A と B は、物理座標系でのピクセルの位置を示す。変数 X と Y を使う時は、その値に留意する。
- このコマンドが実行されると、消去した点の物理座標系での位置をデフォルトの論理座標系での座標 (X, Y) に換算し、その座標値が変数 X と Y に自動的に代入・更新される。
- A には、1 から 63 までの整数値を用い、それ以外の値を設定すると Argument ERROR になる。
- B には、1 から 127 までの整数値を用い、それ以外の値を設定すると、Argument ERROR になる。
PxlTest( の入力方法:
[SHIFT] [F4] (Sketch) [F6] (▷) [F6] (▷) [F4] (Test)
今回のまとめ- PxlTest(A,B) は、物理座標系で位置を設定し、その位置のピクセルの On / Off を調べ、On なら 1 を Off なら 0 を返す。
- A = 1 ~ 63、B = 1 ~ 127 の整数値に限定去れ、それ以外を設定すると Argument ERROR になる。
- PxlTest() のパラメータに、変数 X と Y を使う時は、その値に留意する。
- 変数 X と Y は、描画した点をデフォルト論理座標系に変換した座標値 (X, Y) が自動的に代入・更新される。PxlTest() コマンド使用時には、変数 X と Y の利用には注意が必要である。
今回使ったグラフィックス コマンドつづく...
⇒ Casio Basic入門 G13 / 目次 応援クリックをお願いします。励みになるので...