最終更新日 2005年9月5日

ESCHER.EXE VER.3 の使い方
 このページでは ESCHER.EXE VER.3 で変更になった部分を中心に説明します。今までの ESCHER.EXE の使い方は ESCHER.EXE の使い方 を参照して下さい。

 ESCHER.EXE VER.3 を立ち上げてみましょう。

 メニューの変換群から描きたい模様の群を選びます。ROSE は平行移動の無い模様です。 FRIEZE は一組の平行移動のある模様で一列にパターンが並んでいる模様です。 WALLPAPER は二組の平行移動がある模様で、平面的な模様です。ROSE を選んでみます。

C1 から D10 までのサブメニューがあります。群は回転だけからなる巡回群と回転と線対称からなる二面体群の二種類あります。C5 を選んでみましょう。

 モチーフの作成のダイアログボックスが開きます。 ESCHER.EXE VER.3 では下側にメモの部分が増えています。この部分に TINY LOGO の命令を打ち込みます。ST と打ち込みます。ST は Show Turtle の意味で、画面の中央にタートル(今の場合、テントウムシ?)が現れます。C++やJavaと異なり、我々の言語の命令は大文字か小文字かを区別しません。したがって、ST は st や St や sT でも良いです。

RT 60 でタートルは右に60度向きを変えます。RT と60 の間には一つ以上のスペースが必要です。RT60 と続けると RT60 という一つのトークンとして取り扱われ、そのような命令は知りませんと言われてしまいますので注意して下さい。他の命令も同様です。

一般には RT <数式> でタートルは右に数式の値だけ向きを変えます。左に向きを変えるには負の数値を与えるか、 LT <数式> の形式の命令を使います。RT は RighT を、LT は LefT を意味します。 FD XX を打ち込むと

青の円周上までタートルが移動し、線を描きます。今の場合、XX および YY がこの円の半径の大きさを覚えています。一般には FD <数式> でタートルは数式の値だけ前進します。このとき、ペンが降りていれば、線を描き、ペンが上がっていれば、移動だけします。ペンの上げ下げは PU と PD 命令で制御します。 PU でペンを上げ、 PD でペンを降ろします。最初はペンは降りています。 PU は PenUp を PD は PenDown を意味します。後退するには、負の値を与えるか、BK <数式> の形式の命令を使います。FD は ForwarD を意味し、BK は BacK を意味します。  画面には座標が入っていて、座標を使って、移動の位置を指定することも出来ます。 SETXY XX 0 を実行するとタートルは右の端に移動します。向きは変化しません。

一般には SETXY <数式1> <数式2> の形式で、タートルの移動する位置を指定できます。<数式1> は X 座標で、 <数式2> は Y 座標です。ここで我々の言語は命令の引数に括弧やコンマを使わずにただ単に式を並べるだけなので、負の数値などを指定するときには注意が必要です。例えば、(XX, -YY) に移動させるつもりで SETXY XX -YY としてもだめです。コンピュータは XX -YY を一つの式と認識し、 X 座標しかまだ与えられていないと思っています。つまり SETXY (XX -YY) と理解します。 SETXY XX (-YY) と括弧で囲む必要があります。 SETX <数式> で X 座標だけを変更することが出来、 SETY <数式> で Y 座標だけを変更することが出来ます。 SETX XX/2 を実行します。

OKのボタンをクリックすれば、図形が描かれます。

今度は 変換群メニューの FRIEZE の F2 を選びます。

今回は最初からタートルが現れています。タートルを消すには、HT を打ち込みます。HT は Hide Turtle の意味です。 REPEAT 5 [FD YY/2 RT 72] を実行します。

REPEAT 命令は繰り返しを指示する命令で、REPEAT <数式> [ <命令の並び> ] の形式で使います。意味は <命令の並び> を <数式> の値だけ繰り返せという意味です。今の場合、 REPEAT 5 [FD YY/2 RT 72] は「高さの半分だけ前進し、右に72度回転せよ」という命令を5回繰り返せという命令で、正五角形を描きます。この場合(FRIEZE GROUP の場合)、XX は幅の半分で、YY は高さの半分を保持しています。

「再設定」ボタンをクリックし、

LT 54 REPEAT 5 [FD 120 RT 72] LT 36 FD XX*2/3 LT 9 REPEAT 20 [FD 10 LT 18] REPEAT 20 [FD 15 LT 18] RT 9 FD XX/3 を実行します。

REPEAT 20 [FD 10 LT 18] と REPEAT 20 [FD 15 LT 18] は正20角形を描く命令ですが、円を描く命令の代用です。 命令は一行に複数打ち込んでも良いです。 FD XX*2/3 や FD XX/3 で定数 XX を使っています。 OKのボタンをクリックすれば、綺麗な図ではないですが次のような図形が描かれます。

今度は 変換群メニューの WALLPAPER の p1 を選びます。

右側の「平行四辺形」の「幅と高さの比」を 0.8 に、「横へのずれの割合」を 0.2 に変更します。

FD YY BK YY RT 90 FD XX を実行します。

この場合、YY は中心から真上に進んだときの境界までの距離で、XX は中心から真横に進んだときの境界までの距離です。WALLPAPER の XX および YY のこの解釈はどのパターンでも同じです。CS を実行すると今までの図が消え、タートルが中央に戻ります。 基本境域の範囲を示す図も消えますので、「再設定」のボタンをクリックします。  今度は手続きの定義方法を述べます。三角形を描く手続き SANKAKU を作ります。まず TO SANKAKU と打ち込みます。

「RETURN」きーを押すと

図のような手続きと関数を定義するためのダイアログボックスが現れます。

FOR :I=1 TO 3 [ FD YY/2 RT 120] 

END

と打ち込みます。

ユーザ定義の手続きの定義は TO <手続き名> で始まります。手続きが引数を持つ場合は TO <手続き名> <引数の並び> で始まります。

次の

FOR :I=1 TO 3 [ FD YY/2 RT 120] 

は2番目の繰り返しの例で、

FOR :I = 1 TO 3 STEP 1 [FD YY/2 RT 120]

の省略形です。:I が変数で、変数はすべて変数名の前にコロンを付けたもので示されます。この命令の意味は、変数 :I を 1 から 3 まで 1 づつ増やしながら、[ と ] で囲まれた部分を繰り返し実行しなさいと言う意味です。今の場合、:I を 1 として、FD YY/2 RT 120 を実行し、、:I を 2 として、FD YY/2 RT 120 を実行し、、:I を 3 として、FD YY/2 RT 120 を実行しなさいという意味です。[ と ] で囲まれた部分で変数 :I を使っていませんから、REPEAT 3 [ FD YY/2 RT 120] と同じ振る舞いをします。

FOR :I = 3 DOWNTO 1 STEP 1 [FD YY/2 RT 120]

でも同じです。今度は、変数 :I を 3 から 1 まで 1 づつ減しながら、[ と ] で囲まれた部分を繰り返し実行しなさいと言う意味です。STEP <数式> で増分と減分を指示します。

手続きの定義は

END

の行で終わります。

「OK」ボタンをクリックします。

元のモチーフ入力ダイアログボックスに戻ります。LISTING と打ち込むと SANKAKU と表示され、 SANKAKU という手続きが定義されたことが分かります。LISTING 命令はコンピュータが覚えているユーザ定義の手続きと関数の名前を表示します。SANKAKU と打ち込むと正三角形を描きます。

今度は引数を持った手続き SANKAKU を定義します。引数があるときもコマンドラインでは TO SANKAKU と TO と手続き名だけを打ち込みます。

「RETURN」キーを押します。

コンピュータが覚えている SANKAKU の定義が現れます。これを修正します。

TO SANKAKU :SIZE

FOR :I=1 TO 3 [ FD :SIZE RT 120]

END

と修正します。一行目の :SIZE が引数です。この引数が2行目で FD の引数として使われています。2行目で、一辺 :SIZE の正三角形が描かれます。 「OK」ボタンを押して、元のモチーフを描くダイアログボックスに戻ります。

「再設定」ボタンをクリックし画面を消します。

MAKE "T 0 と打ち込みます。MAKE 命令は変数に値をセットするとき使います。一般形は MAKE "<変数名> <数式> で、"T の様に変数名の前に " を付けます。数式の値が変数にセットされます。変数の値を呼び出すときは、:<変数名> の形で使います。

PRINT :T を実行すると

0 が表示されます。

PRINT 命令は、PRINT <数式> の形式で使い、数式の値を表示します。今の場合、:T に 0 をセットしたので、0 が表示されました。

WHILE :T < 6 [ SANKAKU :T*25 RT 60 MAKE "T :T+1]

を実行します。

WHILE 命令は三番目の繰り返しの指示で、WHILE <条件式> [<命令の並び>] の形式で使い、<条件式> が真の間は<命令の並び>を繰り返します。今の場合、:T が 6 より小さい間は SANKAKU :T*25 RT 60 MAKE "T :T+1 を繰り返します。最後に MAKE "T :T+1 があるので、:T はこれらの命令を繰り返すたびに一つづつ増加するので全体で6回繰り返されます。「再設定」をクリックし、初期画面に戻します。今度は

MAKE "T 1

DO [ FD :T*10 RT 59 MAKE "T :T+1] UNTIL :T = 13

を実行します。

DO UNTIL 命令は四番目の繰り返しの指示で、DO [<命令の並び>] UNTIL <条件式> の形式で使い、まず<命令の並び>を実行し、以下<条件式> が偽の間は<命令の並び>を繰り返します。今の場合、変数 :T が 13 になるまで繰り返します。 再設定」をクリックし、初期画面に戻します。今度は

FOR :T=1 TO 16 [IF :T%2=0[PD][PU] FD 30 RT 360/16]

を実行します。

IF 命令は条件分岐の命令です。IF <条件式> [<条件式が真のとき実行する命令の並び>][<条件式が偽のとき実行する命令の並び>] の形式または IF <条件式> [<条件式が真のとき実行する命令の並び>] の形式で使います。今の場合、変数 :T を 2 で割った余りが 0 (すなわち :T が偶数のとき)ペンを降ろし、、変数 :T を 2 で割った余りが 1 (すなわち :T が奇数のとき)ペンを上げるよう指示しています。PD がペンを降ろせという命令で、ペンを降ろしていれば、移動したとき線を描きます。デフォルトはペンを降ろした状態です。PU がペンを上げろという命令で、ペンが上がっていれば、移動しても線を描きません。 「再設定」をクリックし、初期画面に戻します。今度は

SETPC 3

SETPW 3

FOR :T=1 TO 16 [IF :T%2=0[PD][PU] FD 30 RT 360/16]

を実行します。

SETPC 3 はペンの色を指示する命令です。数字によって色が変わります。 ペンの色は 0 BLACK 黒    1 MAROON 栗色 2 GREEN 緑    3 OLIVE   黄緑 4 NAVY 濃い紺   5 PURPLE  紫 6 TEAL 暗い青緑 7 GRAY  灰 8 SILVER 銀    9 RED 赤 10 LIME 濃い緑  11 YELLOW  黄 12 BLUE 青    13 FUCHSIA 赤紫 14 AQUA 水    15 WHITE  白 です。SETPW 3 はペンの大きさを変える命令です。デフォルトは 1 です。 「OK」ボタンをクリックします。

今度は変換群メニューの WALLPAPER の p6 を選択します。

PUSH

RT 90 FD XX

SETXY XX/2 (-YY/2)

POP

を実行します。

PUSH 命令はタートルの位置とタートルの向きをスタックに保存する命令です。POP 命令は保存しておいたタートルの位置とタートルの向きをスタックから取り出す命令で、POP を実行すると取り出した位置にタートルが移動し、保存しておいたタートルの向きになります。スタックというのは最後に保存したものが最初に取り出される機能を持ったデータ構造です。今の場合、原点で PUSH していますから、POP で原点に戻ります。原点に戻るだけなら HOME 命令でも良いです。描画メニューの塗りつぶしを選び、三角形に色を付けます。

場合によっては、意図した部分より大きな部分が塗りつぶされることがありますが、「OK」ボタンをクリックしてみるとうまくいっていることがあります。 「OK」ボタンをクリックします。

この模様は、線対称なモチーフを指定したので、p6 ではなく p6m の対称性を持ってしまいました。

複素数について

複素数が使えるようになっています。 複素数を定義するには

書式 COMPLEX 数式1 数式2<BK> で定義してください。色々な初等関数が複素数を引数として 使えます。例えば PRINT SIN COMPLEX 1 2 とすれば、sin (1 + 2 i) が表示されます。勿論、複素数の 四則が可能です。このMICRO LOGOは複素数を基本データとして 動いています。

組み込み関数は

ASIN, ACOS, ATAN, ATAN2, ... 逆三角関数 (これらは実数値変数です) SIN, COS, TAN, POW, LOG, EXP, SQRT, ABS, FLOOR, CEIL, QUOTIENT, RANDOM, RAND, XCOR, YCOR, HEADING, TOWARDS, PC, PW です。

演算子について 算術演算子は +、−、*、/、% です。 比較演算子は >、<、>=、<=、=、!= です。 論理演算子は AND、OR、NOT です。 強さは単項演算子の +、−、NOTが一番強くて、 次に *、/、%、ANDが強く、+、−、OR の グループが続き、比較演算子が最も弱いです。 論理演算子の強さが通常と異なっているので注意。こまめに括弧を付けて下さい。

ESCHER VER.3.0 で改良した部分の基本的な解説が終わりました。このプログラミング言語は MICRO LOGO と同様ひらがなの命令をサポートしています。正確に言うと MICRO LOGO VER.5.0 を ESCHER に組み込み、必要ないと思われる機能を消し、特別な定数(変換群の種類によって変化しますが)XX と YY を新たに追加し、PUSH 命令と POP 命令を新たに導入し、ESCHER のモチーフを描く機能と整合性を取ったのが ESCHER VER.3.0 です。 ひらがなでは XX と YY の二倍をそれぞれ「たかさ」と「はば」とし、PUSH と POP をそれぞれ「ほぞん」と「ふくげん」としています。その他のこの言語の機能について興味のある方は MICRO LOGO のヘルプを参照して下さい。

ESCHER VER.3.1 でモチーフの基本領域の四つの頂点の座標を左上隅から順に反時計回りで、(X0,Y0), (X1,Y1),(X2,Y2),(X3,Y3) で得ることが出来るようにしました。従って、

SETXY X1 Y1

の様に使うことが出来ます。また、モチーフの基本領域が長方形の場合、縦横の比率を1以上にすることも出来るようにしました。更に、画面の基本領域の個数が指示した数と近い数になるように修正しました。 ESCHER VER.3.2 でモチーフを描くダイアログボックスで、N-センター(回転の種類が分かるように)や線対称の軸や併進鏡映の軸を表示するようにしました。

ESCHER VER.3に戻る

ホームページに戻る