先日のエントリで,体のいくつかの部分を使って線画を描画できるように命令を拡張したことをお伝えしました.
命令の様式 | 処理 |
---|---|
PEN arg1 [arg2] | arg1 がUPの場合,ペンを上げる.DOWN の場合,ペンを下げる.arg1がUPまたはDOWNの時に限り,ペンの上げ下げをする体の部位の名称をR,RW命令と同様の表記でarg2に指定できる.arg2が省略された場合は BODYが記述されているものと見なされる.
ペンの両端について,arg1がSQUAREの場合,線の両端の形状は四角,arg1がROUNDの場合線,両端の形状を丸を付加する.arg1がBUTTの場合は両端に形状を付加しない.ペンの種類について,arg1 が NORMALの場合は実線を,ERASEの場合は線を消す,XORの場合はすでに描かれていた部分は消し,そうでない部分は描く(反転). 初期状態はペンが上がっている状態で,線の両端の形状は四角(SQUARE),ペンの種類はノーマル(NORMAL). |
指定できる体の位置は以下の9箇所です
[日本語] [English]
描画に関しては,有限時間で描画することを想定していたのですが,ピクトグラミングでは時間0で描画する機能も有しているため,時間0で体のいくつかの部分を使って線画を描画する場合の想定に一部見落としがありました.まずは,仕様の変更部分を先に提示します.変更した部分を赤字で示しています.
命令の様式 | 処理 |
---|---|
R arg1 arg2 arg3 arg4 | arg4 秒後にarg1で指定される体の部位を反時計回りにarg2 度だけarg3 秒かけて支点を中心に等速回転する.arg4 が 省略された時は,arg4 に0が,arg3,arg4 の両方が省略された時はいずれも0が入力されているものとして取り扱う. |
RW arg1 arg2 arg3 | arg1で指定される体の部位を反時計回りにarg2度だけarg3秒かけて支点を中心に等速回転する.回転が終了するまで次の命令は実行されない.arg3が省略された時は,arg3に0が入力されているものとして取り扱う. |
M arg1 arg2 arg3 arg4 | arg4秒後にarg3秒かけてx軸正方向に arg1ピクセル, y軸正方向にarg2ピクセルだけ全体を等速直線移動する.arg4が省略された時は,arg4に0が,arg3, arg4の両方が省略された時はいずれも0が入力されているものとして取り扱う.arg3が省略された時は,arg3に0が入力されているものとして取り扱う. |
MW arg1 arg2 arg3 | arg3 秒かけてx軸正方向に arg1 ピクセル, y軸正方向にarg2 ピクセルだけ全体を等速直線移動する.直線移動が終了するまで次の命令は実行されない.arg3が省略された時は,arg3に0が入力されているものとして取り扱う. |
これまで,R arg1 arg2 0 と RW arg1 arg2 0 は同じ命令でした.M arg1 arg2 0 と MW arg1 arg2 0 も同じです.今回RW,MW命令に第3引数を省略できるようにしました.これはR arg1 arg2 と RW arg1 arg2 ,M arg1 arg2 と MW arg1 arg2 を,描画を伴う場合に異なる挙動とするためにこのように仕様を変更します.
時間0のR命令,M命令は,元の位置と,R命令,M命令からなる複数の命令の動きを全て実行したあとの位置を両端とする線分を描画します.
時間0のRW命令,MW命令は,元の位置とその命令を実行したあとの位置を両端とする線分を描画します.
この違いを例に示します.
SK
PENW 10
PEN DOWN LLA
RW LUA 45
RW LUA 45
は下のようになります.左腕の初期位置から,左上腕を反時計回りに45度回転した位置まで線分を描きます.さらに左上腕を反時計回りに45度回転した位置まで別の線分を描きます.
SK
PENW 10
PEN DOWN LLA
R LUA 45
R LUA 45
は下のようになります.左腕の初期位置から,左上腕を反時計回りに90(=45+45)度回転した位置まで線分を描きます.
よって
SK
PENW 10
PEN DOWN LLA
REPEAT 8
RW LUA 45
END
は下のような正8角形を描きますが.
SK
PENW 10
PEN DOWN LLA
REPEAT 8
R LUA 45
END
は何も描きません.なぜなら左腕の初期位置と,初期位置から左上腕を反時計回りに360(=45*8)度回転した位置は同じだからです.
同様に,
SK
PENW 3
PEN DOWN LLA
M 100 0
M 0 100
は下のようになりますが,
SK
PENW 3
PEN DOWN LLA
MW 100 0
MW 0 100
は下のようになります.
このR,RW,W,MWの機能拡張によって,描画に有限時間要する場合と,描画を時間0で描く場合の描画ルールを統一することができました.