Casio Basic入門G13

Casio Basic入門
<目次>

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

修正 2015/11/03

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

前回: Casio Basic入門G12

Chapter G13
PxlChg コマンド


前回 ViewWindow による座標系設定で動作確認した以下のグラフィックス描画を行うコマンドは、[SHIFT] [F4] (Sketch) に続くメニューの中にあり、これらをSketch描画コマンドと呼ぶことにします。
  • Plot
  • PlotOn
  • PlotOff
  • PlotChg
  • Line
  • F-Line
  • Circle
  • Vertical
  • Horizontal
  • Text
  • PxlOn
  • PxlOff
  • PxlChg
  • PxlTest( )
今回は、PxlChg について、詳細動作を調べます。


PxlChg コマンド

fx-9860GII Ver 2.04 のソフトウェアマニュアル の 8-24 ページには、以下の PxlCgf コマンドの説明があります。

PxlChg <行番号>,<列番号>

説明はこれだけです。

ここで、行番号は縦方向、列番号は横方向です。これだけでは、原点がどこにあるか分かりません。

PxlChg コマンドは、物理座標系で位置を設定し、その位置のピクセルが On なら Off に、Off なら On に切り替えます。
座標系とピクセル位置2 
原点は、左上で (1, 1) です。このコマンドを記述すると、例えば、

PxlChg y,x

となり、y は縦方向、 x は横方向の位置です。

通常、x を横方向の座標値、y を縦方向の座標値にするので、このようにしてみました。多くのコマンドでは 横方向 (x) が1つめのパラメータに来るのですが、PxlChg の1つめのパラメータは縦方向の y であり、2つめのパラメータが横方向の x で、違和感があります。仕様なので、しかたありません。

物理座標系で位置を設定するコマンドは、PxlChg 以外も全てこのようになります。既に使ってきている Text コマンドも同様です。

さて実際に

PxlChg Y,X 

と、1行だけのプログラムを書いて、実行するとエラーになります。

PxlChg の入力方法[SHIFT] [F4] (Sketch) [F6] (▷) [F6] (▷) [F3] (PIXL) [F3] (Chg)

Argument_ERROR  

[2015/10/28] 訂正
変数 Y に 1 ~ 63 以外の整数、変数 X に 1 ~ 127 以外の整数が格納されていると、Argument ERROR となります。
PxlTest() を使う際には、変数 X と Y の初期値に留意する必要があり、必要に応じてエラーが出ないように初期化する必要があります。
===== 訂正ここまで =====

PxlChg コマンドを使う時、変数 XY は、描画した点の位置をデフォルトの論理座標系に換算した座標 (X, Y) の値に自動的に更新されることが確認できます。

例えは、PxlOff A,B を実行すると、物理座標系での点(B, A) を描画し、この点の位置がデフォルトの論理座標系へ変換された座標 (X, Y) へ自動計算され、X と Y がその値で自動的に更新されるわけです。そして、変数 X と Y は使ってはいけない予約変数として扱われます。

PxlChg の動作を確認するため、以下のように点線を3本描いて、ピクセルが交互に On と Off になる状態を作り、それぞれのピクセル位置で PxlChg を実行して、ピクセルの On と Off が逆転することを確認します。

PxlChg_2 

この準備には、PxlOn を使うことにします。

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 文



これで、準備が終わったので、PxlChg の動作を確認するために以下のプログラムに仕上げます。

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

Text 1,1,"PxlChg"
Text 7,1,"X="
Text 13,1,"Y="
Text 45,1,"Hit Any Key: Do PxlChg"

0→X:0→Y
For 31→A To 33
For 1→B To 127
PxlChg A,B
Text 7,10,X
Text 13,10,Y

While Getley=0
WhileEnd

Text 7,10,"  " (スペース4個)
Text 13,10,"  " (スペース4個)
Next
Next 

ダウンロード: PXLCHG1 


青文字で示した2行の While ループは、何かキーが入力されるまでプログラムを一旦停止する働きをします。
よく使う方法なので、逆引き Casio Basic にも掲載しました。
キー押下でプログラムをコントロールしたい - 逆引き Casio Basic

プログラムを一旦停止するには、 命令を使う方法もあり、これは簡単な方法です。一旦停止を解除するには [EXE] キーを押します。但し、今回のプログラムでは、プログラムを進めるには [EXE} キーを連打し続ける必要があり大変です。一方、上の方法だと 何かキー([AC] キー以外)を押し続けるだけでプログラムは進むので格段に操作が楽になるので、この方法を紹介しています。

For 文については、準備で PxlOn による点描画を行ったのと全く同じなので、ここでは割愛します。


赤文字で示したこのプログラムの肝心な部分では、PxlChg を実行し、その後に 変数 X と Y の値を確認しています。
X と Y は、PxlChg が On と Off を切り替えたピクセルの座標を示しますが、デフォルトの論理座標系での座標値を示します。
PxlChg A,B で示しているピクセルの位置 (A, B) は物理座標系での位置を示しますが、X と Y はその座標をデフォルトの論理座標系に変換した (X, Y) になっているわけです。

座標系とピクセル位置4 

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

このプログラムを起動すると、先ずは PxlOn でピクセルが交互に On になるように点線を3行描画します。

PxlChg_1 


これは2行目を描画しているところです。描画は続きます。

PxlChg_2 

3行目の描画がほぼ終わったところです。3行の範囲でピクセルが交互に On になっているのが分かります。

準備が完全に終わると、以下の表示でプログラムが一旦停止します。

PxlChg_3 


1行目の左端は、既に PxlChg で Off だったピクセルが On になっているのがわかります。上のプログラムでは、PxlChg を1回実行した直後、プログラムが While ループに入って、それが回り続けるため、そこから先へプログラムが進みません(止まっているように見えます)。

では、何かキー(但し [AC] キー以外)を短く押すと PxlChg が1回づつ実行され、同時に X と Y の値が表示されます。

1行目の中央まで進んだところが下の画面です。

PxlChg_4 

交互に On になっていたピクセルの On と Off が切り替わっていることが一目瞭然です。そして、X=0、Y=0.1 となっていて、デフォルトの論理座標系での値になっていることが確認できます。

座標系とピクセル位置4 

さらに、何かキーを押します。押し続けるとプログラムは進むので、しばらく押し続けてみてください。

PxlChg_5 


3行目まで進みました。X と Y の値もデフォルトの論理座標系に従っていることが分かります。

PxlChg_6 

3行目の右端のピクセルで PxlChg が実行され、そのときの X と Y の値が表示されたところです。


以上から、PxlChg では、パラメータに X と Y を使えないかわりに、X と Y には、デフォルトの論理座標系での座標値 (X, Y) の値が自動的に更新されることが確認できました。

PxlChg を使う時は、変数 X と Y の値が勝手に変更されることに留意し、プログラムを書く必要があります。通常は、ピクセル位置の指定に X と Y が使え、さらに論理座標系で使える PlotChg を使う方が余計なことに留意する必要がありません。

逆に言えば、物理座標系からデフォルトの論理座標系への自動変換をする機能をうまく利用したいとき、物理座標系でピクセルの On Off を切り替えたいときは、PxlChg コマンドの利用価値があると英増す。


なお、PxlChg コマンドで設定する値には制限があって、制限以外の値を設定すると Argument ERROR になります。
デフォルトおよび ViewWindow の論理座標系で使うコマンドでは、パラメータの値に制限はなくエラーにならないのに対して、物理座標系で使うコマンドは、制限外の値を設定するとエラーになることも留意する必要があります。

PxlChg A,B では、A = 1 ~ 63 の整数、B = 1 ~ 127 の整数に制限されます。実際に簡単に試せるので、ここでは確認プログラムの紹介は割愛します。


PxlChg

書式PxlChg A,B
  • パラメータ A と B で指定された位置のピクセルの On と Off を切り替える。
  • パラメータ A と B は、物理座標系での位置を示す。変数 X と Y を使う場合は、その値に留意する。
  • このコマンドが実行されると、消去した点の物理座標系での位置をデフォルトの論理座標系での座標 (X, Y) に換算し、その値が変数 X と Y に自動的に代入・更新される。
  • A には、1 から 63 までの整数値を用い、それ以外の値を設定すると Argument ERROR になる。
  • B には、1 から 127 までの整数値を用い、それ以外の値を設定すると、Argument ERROR になる。

PxlChg の入力方法[SHIFT] [F4] (Sketch) [F6] (▷) [F6] (▷) [F3] (PIXL) [F3] (Chg)





今回のまとめ
  • PxlChg A,B は、物理座標系で位置を設定し、その位置のピクセルの On と Off を切り替える。
  • A = 1 ~ 63、B = 1 ~ 127 の整数値に限定去れ、それ以外を設定すると Argument ERROR になる。
  • PxlChg のパラメータに X と Y を使う時は、その値に留意する。
  • 変数 X と Y は、描画した点をデフォルト論理座標系に変換した座標値 (X, Y) が自動的に代入・更新される。PxlChg コマンド使用時には、変数 X と Y の利用には注意が必要である。


今回使ったグラフィックス コマンド

  • PxlChg



つづく...

Casio Basic入門 G14 / 目次




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

人気ブログランキングへ


FC2ブログランキングへ







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

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



関連記事

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

コメントの投稿

非公開コメント

変数X,Yも使える?

管理人様、こんにちは!

Pxl系のコマンドはCBasicでの実装でちょっと悩んだところなのですが、
変数X,Yが使われているとエラーとなるというのはそれを検出するのが結構手間のかかる実装なので、
ひょっとしたら数値だけでエラーになっているのではと思って調べたところ、
値が物理座標の範囲かつ整数値というのであればX,Yを使ってもエラーにならず使えるみたいです。

ViewWindowで物理座標と同じ設定になる、
ViewWindow 1,127,0,63,1,0
を設定すれば問題なく使えるようです。

ViewWindow 1,127,0,63,1,0
For 1→Y To 63
For 1→X To 63
PxlChg Y,X
Next
Next


ViewWindowのY軸を逆にすると
ViewWindow 1,127,0,1,63,0
ちょっと面白い動作になります(^^;


PxlChgとは直接関係ないですけど、
ちょいバグが見つかったので修正したバージョンです。

アドイン版CasioBasic ver.0.36 テスト版 その3.6
http://pm.matrix.jp/CB/CBASIC036.zip

PxlChgはCasioBasic同様に動作すると思います(^^)

Re: 変数X,Yも使える?

sentaro様

ありがとうございます。思いっきり勘違いしていました。

過去記事を修正しました。


> ViewWindow 1,127,0,63,1,0
> For 1→Y To 63
> For 1→X To 63
> PxlChg Y,X
> Next
> Next
>
>
> ViewWindowのY軸を逆にすると
> ViewWindow 1,127,0,1,63,0
> ちょっと面白い動作になります(^^;

はい、これは X と Y の扱いがよくわかりますね。

このスースを少し弄って、次のネタで Pxl系コマンドの X と Y の挙動を面白く見せることにしました。


いや~、本当にありがとうございます。

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

やす (Krtyski)

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


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

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

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


人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

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

この人とブロともになる

QRコード
QR