変数

MELにおける変数

MELの変数はC言語に似ている。
しかし、全てが同じわけではないので注意が必要である。

MELの変数には以下の特徴がある。

変数の例

半径を1づつ小さくしながら3個の球を接しながら並べるプロシージャーのMELスクリプト。
プロシージャーの引数(int $r)に最初の球の半径を与えて、2番目以降の球は半径が1づつ小さくなってゆく。

  1. mel フォルダーへ移動しておく。
    % cd mel
    % pwd
    Z://mel
    
  2. make3Sphere.melというファイルをviを使って作る。
    ファイルの内容は、以下のように書いておく。
    global proc make3Sphere(int $r)
    {
    	int $m;
    
    	sphere;
    	scale $r $r $r;
    
    	$r -= 1;
    	sphere;
    	scale $r $r $r;
    	$m = 2 * $r + 1;
    	move $m 0 0;
    
    	$r -= 1;
    	sphere;
    	scale $r $r $r;
    	$m += 2 * $r + 1;
    	move $m 0 0;
    }
    
  3. Script Editorの File → Source Script によってmake3Sphere.melを読み込む。
  4. Script Editorに make3Sphere(3);と打ち込んで実行する。
    またはmake3Sphere 3 と打ち込んで実行する。
  5. 半径3、2、1の3個の球が作られる。
    make3Sphere(3)の実行結果

スクリプトの解説

global proc make3Sphere(int $r)
intの引数($r)を1個とるプロシージャー。
$rは最初の球の半径になる。
int $m;
球を移動するための値を入れておく変数。
sphere;
最初の球を作る。
scale $r $r $r;
最初の球の半径は$rなので球を$rだけスケールする。
$r -= 1;
2個目の球の半径は1個目より1小さいので$rから1引く。
sphere;
2個目の球を作る。
scale $r $r $r;
2個目の球を$rだけスケールする。
$m = 2 * $r + 1;
2個目の球を移動する距離を求める。
$rはすでに1だけ小さくなっているので 一つ前の球の半径は$r + 1である。
それと現在の球の半径を加えれば2つの球の間の距離になる。
$r + 1 + $r = 2 * $r + 1
[隣り合う2つの球]
move $m 0 0;
2個目の球を$mだけ移動する。
$r -= 1;
3個目の球の半径は2個目より1小さいので$rから1引く。
sphere;
3個目の球を作る。
scale $r $r $r;
3個目の球を$rだけスケールする。
$m += 2 * $r + 1;
3個目の球を移動する距離を求める。
計算方法は2個目と同じである。
ただし、2個目の球の位置に計算結果を加えていることに注意すること。
move $m 0 0;
3個目の球を$mだけ移動する。

練習

まとめ

参考


Prev | Next
Home | Contents
abe@injapan.net