絵を定義して描く

移動・変形して描くDRAW

すでに学んだように DRAW は circle と disk、SHIFT や SCALE と組み合わせて好きなところに好きな大きさで円を描くことができます。さらに DRAW は円以外にも自分で定義した図形を円と同様に移動・拡大して表示する機能があります。

これはなかなか強力な機能です。一つ分のプログラムだけを書いておき、それを条件を変えて呼び出すことでたくさんの図を書くことができます。

まず、前回のプログラムを見てください。

SET WINDOW  -250,250,-250,250
SET AREA CO...  てんとう
DRAW disk ......  むしをいっぴき
DRAW disk ....    表示する部分
END

このテントウムシをたくさん描くようにプログラムを変更してテントウムシを描く部分を独立させます。

SET WINDOW  -250,250,-250,250
END
EXTERNAL PICTURE tentou
SET AREA CO...  てんとう
DRAW disk ......  むしをいっぴき
DRAW disk ....    表示する部分
END PICTURE

次に、この絵を定義する部分(EXTERNAL PICTURE)を呼び出すために、その使用を宣言する部分と、呼び出す部分を書き加えます。

DECLARE EXTERNAL PICTURE tentou
SET WINDOW  -250,250,-250,250
DRAW tentou
END
EXTERNAL PICTURE tentou
SET AREA CO...  てんとう
DRAW disk ......  むしをいっぴき
DRAW disk ....    表示する部分
END PICTURE

これで元と同じように絵が描けるはずです。

中心の位置をずらし大きさも変える

これに DRAW disk の時のように SCALE や SHIFT を適用することができるのです。

DRAW tentou WITH SCALE(r)*SHIFT(x,y)

たくさん描く

つぎにこれを何回も描いてみます。DRAW tentou の部分を次のように変えます。

FOR y=-200 TO 200 STEP 80
   FOR x=-200 TO 200 STEP 80
      DRAW tentou WITH SHIFT(x,y)
   NEXT x 
NEXT Y 

回転を加える

つぎにランダム関数を使って、回転させます。ROTATE(角度)を使います。角度に度数を使うためにOPTION ANGLE DEGREESを宣言します

RANDOMIZE
OPTION ANGLE DEGREES
FOR y=-200 TO 200 STEP 80
   FOR x=-200 TO 200 STEP 80
      DRAW tentou WITH ROTATE(RND*360+1)*SHIFT(x,y)
   NEXT x 
NEXT Y 

色を変える

やはりランダム関数を使って、色を変えてみましょう。tentou に (col) をつけて、色情報を外から指示できるようにします。このようなものを引数といいましたね。絵の定義はサブルーチンに似ています。

RANDOMIZE
OPTION ANGLE DEGREES
FOR y=-200 TO 200 STEP 80
   FOR x=-200 TO 200 STEP 80
      COL=RND*256+1
      DRAW tentou(col) WITH ROTATE(RND*360+1)*SHIFT(x,y)
   NEXT x 
NEXT Y 

tentouの最初も変えます。(DECLARE の部分はかえません)ここでは c を使って col の値を受けましたが、同じく col にしてもかまいません。EXTERNAL 部分では同じ変数名であっても別のものとして扱われます。呼び出すときに ( ) の中に書かれたものがここを窓口にして渡されるのです。

EXTERNAL PICTURE tentou(c)

EXTERNAL PICTURE tentou(c) 〜 END PICTURE のあいだで、色を変えたいところに c を使っていけばよいのです。たとえば、

SET AREA COLOR c

頭や模様も c にしてしまうと見えなくなりますから、体の部分だけにしておきます。

例41

上記のプログラムを作りなさい。テントウムシの数や並べ方、色使いなどは自由でよい。


聖愛高等学校
http://www.seiai.ed.jp/