実習1 @下のプログラムを入力してみよう。
10 SCREEN 3 20 CLS 3 30 FOR X=270 TO 370 40 FOR Y=170 TO 230 50 C=(X+Y) MOD 7 60 PSET (X,Y),C 70 NEXT Y 80 NEXT X 90 END |
高分解能カラーモードの指定 画面消去 Xを270〜370まで+1しながら繰り返す Yを170〜230まで+1しながら繰り返す 色の指定(X+Yを7で割った余り) 座標(X,Y)に50行目で計算した色で点を表示 Yが230になるまで40行目に戻る Xが370になるまで30行目に戻る プログラムの終了 |
Aプログラムの実行。
RUN とタイプしリターンキーを押す。または、f・5 を押す。
画面中央に模様が表示されます。
Bプログラムの修正。(色指定の式の変更)
50行目を下のように修正してみよう。
画面に OK が表示されていれば、枠の中に書かれている通りに書いてリーターンキーを押せば修正されます。 LIST とタイプしリターンキーを押すこと(f・4を押す)でプログラムが表示され、修正の確認ができます。
C50行目をいろいろ変えて実行してみよう。
+ | + |
- | − |
* | × |
/ | ÷ |
= | = |
^ | 累乗 |
数式 MOD 数 | 数式÷数の余りを求める(剰余) |
ABS(数式) | |数式| (絶対値) |
SIN(数式) | sin数式 正弦の値(単位はラジアン) |
COS(数式) | cos数式 余弦の値(〃) |
TAN(数式) | tan数式 正接の値(〃) |
EXP(数式) | e数式 |
LOG(数式) | loge数式 自然対数の値 |
SQR(数式) | 数式の平方根の値 |
例) | |
2*X+Y | 2x+y |
X/2−6 | x÷2−6 |
(X+Y)/3 | x+y ―――― 3 |
X^2+3*X−7 | x2+3x−7 |
15 MOD 7 | 15÷7の余り……1 |
Dきれいな模様になったら、画面いっぱいに表示してみよう。
30 FOR X=0 TO 639 40 FOR Y=0 TO 399 |
30,40行目を左のように変更する。 ※表示し終わるまで、大変時間がかかります。 途中で終わりたいときは、STOPキーを押す。 |
☆「Overflow in 50」となるときは、50行目の式を100や1000で割ってみよう。
☆「Illegal function call in 60」となるときは、50行目の式全体の絶対値をとってみよう。50 C=ABS(式全体) MOD 7 としてみる。
☆「/0」が表示されるときは、50行目の計算で、0(零)で割っているためです。0(零)で割らないように式を変更する。
☆青色しかでてこないときは、式の値が1以下になっているためです。50行目の式に100や250を掛けてみよう。
☆参考
50 C=ABS(COS(X)*Y) MOD 7 |
50 C=ABS(X^2/5-Y^2/9) MOD 7 |
50 C=(LOG(X^2)+LOG(Y^2))*150 MOD 7 |
50 C=SQR(X^3+Y^3) MOD 7 |
実習2 @ NEW とタイプしリターンキーを押す。
A下のプログラムを入力し、実行してみよう。
100 SCREEN 3:CLS 3 | 画面の初期化 |
110 CX=320:CY=200 | 表示開始座標(中心)の設定 |
120 PI=3.1416 | 円周率の設定 |
130 FOR R=1 TO 100 | Rを1〜100まで1づつ増やす |
140 FOR T=0 TO 2*PI STEP .01 | Tを0〜6.2832まで0.01づつ増やす |
150 X=COS(T)*R+CX | X座標の設定 |
160 Y=SIN(T)*R+CY | Y座標の設定 |
170 C=ABS(LOG(R)*Y) MOD 7 | 色の設定 |
180 PSET (X,Y),C | 点を表示 |
190 NEXT T | Tで繰り返す |
200 NEXT R | Rで繰り返す |
210 END | 終了 |
B170行目を変更して実行してみよう。
C140行目の .01 をいろいろ変えて(例えば、.5)実行してみよう。
Dきれいな模様のとき、130行目の 100 を 200 に変えて実行してみよう。
実習3 @下のプログラムを入力してみよう。
100 CLEAR:CONSOLE ,,0,1:SCREEN 3,0,0,1:CLS 3
110 VIEW (220,20)-(580,380):WINDOW (-5,-5)-(5,5)
120 GOSUB *EGAKU
130 END
140 *EGAKU:
150 LINE (-5,0)-(5,0),4:LINE (0,-5)-(0,5),4
160 INPUT "A,B,N==>";A,B,N
170 FOR I=0 TO 36000! STEP .5
180 T=(3.14159*I)/180
190 X=SIN(A*T)*N:Y=-SIN(B*T)*N
200 C=INT(RND*7)+1
210 IF I=0 THEN PSET (X,Y),C ELSE LINE -(X,Y),C
220 A$=INKEY$
230 IF A$="S" THEN 160 ELSE IF A$="E" THEN CLS 3:GOTO *EGAKU
240 NEXT
250 RETURN
プログラムの解説
100 画面の初期化
110 曲線を描く画面の範囲の指定とグラフの目盛りの大きさの設定
120 *EGAKU というサブルーチンへ行く
130 プログラムの終了
140 *EGAKU というサブルーチンの始まり
150 x軸、y軸を描く
160 A,B,Nの入力(1,2,3というふうに入力する)
170 繰り返しの設定(Iを0〜36000まで0.5づつ増やしながら繰り返す)
180 度からラジアンへの単位の変更
190 x座標とy座標の計算
200 色の指定(ランダムに指定される)
210 かき始め(I=0の時)の座標に点を打ち、以後は、前の座標から線を引く
220 キー入力があったら、A$ に入力されるが、入力待ちはしない
230 A$がSのとき、図を残して、A$がEのときは図を消して繰り返す
240 Iが36000になるまで170行へ行く
250 *EGAKUが呼び出された次の行へ戻る
A実行してみよう。
AとBとNの値を聞いてくるので、適当な数字を入力してみよう。
Nは図形の大きさです。(1≦N≦5で試してみよう)
AとBの値の組合せで、いろいろな曲線が描かれますが、これらの曲線をリサージュ曲線と呼んでいます。
B考えてみよう。
AとBの値の組合せによって、どのようなリサージュ曲線が描かれるか、いろいろ試して考えてみよう。別紙の表に書き込んで提出して下さい。
※STOPキーを押すと実行を終わります。画面に OK と表示されます。
実習4 @実習3の160,190行を修正してみよう。
160 INPUT "A,N==>";A,N |
190 R=N*SIN(A*T):X=R*COS(T):Y=-R*SIN(T) |
OK と表示されていれば、上のように入力してみよう。1行ごとにリターンキーを押すこと。
LIST とタイプし、リターンキーを押すと下のリストが表示されるので、修正できたか確認してみよう。
100 CLEAR:CONSOLE ,,0,1:SCREEN 3,0,0,1:CLS 3
110 VIEW (220,20)-(580,380):WINDOW (-5,-5)-(5,5)
120 GOSUB *EGAKU
130 END
140 *EGAKU:
150 LINE (-5,0)-(5,0),4:LINE (0,-5)-(0,5),4
160 INPUT "A,N==>";A,N
170 FOR I=0 TO 36000! STEP .5
180 T=(3.14159*I)/180
190 R=N*SIN(A*T):X=R*COS(T):Y=-R*SIN(T)
200 C=INT(RND*7)+1
210 IF I=0 THEN PSET (X,Y),C ELSE LINE -(X,Y),C
220 A$=INKEY$
230 IF A$="S" THEN 160 ELSE IF A$="E" THEN CLS 3:GOTO *EGAKU
240 NEXT
250 RETURN
A実行してみよう。
AとNの値を聞いてくるので、適当な数字を入力してみよう。
Nは図形の大きさです。(1≦N≦5で試してみよう)
Aの値のよって、いろいろな曲線が描かれますが、これらの曲線を正葉線と呼んでいます。この曲線が、花びらや葉っぱに似ているからです。
B考えてみよう。
Aの値によって、どのような正葉線が描かれるか、いろいろ試して考えてみよう。別紙の表に書き込んで提出して下さい。
☆観察が終わったら
図形を残して繰り返し、きれいな模様を描いてみよう。
A | B | 曲 線 の 形 | A | B | 曲 線 の 形 |
---|---|---|---|---|---|
1 | 2 | ||||
1 | 3 | ||||
3 | 1 | ||||
正葉線
A | 曲 線 の 形(葉 の 数) | A | 曲 線 の 形(葉 の 数) |
---|---|---|---|
1 | |||
1 | |||
3 | |||
1.5 | |||
2.3 | |||
実習5 @下のプログラムを入力してみよう。
100 *HAJIME:
110 CLEAR:SCREEN 3,0,0,1:CONSOLE 0,24,0,0:CLS 3
120 VIEW (0,0)-(639,399):WINDOW (-319,-299)-(320,100)
130 INPUT "枝分かれ数:",EDA
140 INPUT "初めの長さ:",N
150 INPUT "分かれる角度:",D
160 INPUT "枝の色:",C
170 INPUT "縮小回数:",K
180 INPUT "X方向の縮小率:",SX
190 INPUT "Y方向の縮小率:",SY
200 DIM E(K+1),X(K+1),Y(K+1)
210 RAD=3.14159/180:R1=D*RAD:R2=2*D/(EDA-1)*RAD:I=0
220 X(0)=0:Y(0)=0:X(1)=0:Y(1)=N
230 LINE (X(0),-Y(0))-(X(1),-Y(1)),C
240 *L1:
250 I=I+1:IF I<K THEN R=R1:GOSUB *EGAKU
260 *L2:
270 E(I)=0:I=I-1:IF I<1 THEN *LE
280 IF E(I)<EDA THEN R=R1-R2*E(I) ELSE *L2
290 PSET (X(I),-Y(I)),C:GOSUB *EGAKU
300 *LE:
310 A$=INPUT$(1):IF A$="E" THEN END ELSE *HAJIME
320 *EGAKU:
330 VX=(X(I)-X(I-1))*SX:VY=(Y(I)-Y(I-1))*SY
340 X(I+1)=VX*COS(R)-VY*SIN(R)+X(I)
350 Y(I+1)=VX*SIN(R)+VY*COS(R)+Y(I)
360 LINE -(X(I+1),-Y(I+1)),C
370 E(I)=E(I)+1
380 RETURN *L1
プログラムの解説
100,240,260,300,320行をそれぞれ *HAJIME,*L1,*L2,*LE,*EGAKU とする。
110行で、メモリーと画面を初期化する。
120行で、曲線を描く画面の範囲と座標の大きさを設定する。
130〜200行で、描くために必要な数値の入力と、配列変数の宣言をする。
210行で、角度を度数法からラジアン法へ変更する。
220〜230行で、最初の線を引く。
250行で、繰返し回数になるまで最初の枝分かれの線を引きに行く。
270行で、繰返し回数分線を引き終わっていれば終わりの処理へ行く。
280行で、枝分かれの回数になっていなければ次の枝分かれの角度をセットし、なっていれば繰返し回数の判断へ行く。
290行で、次の枝分かれする線の始点に点を描き、線を引きに行く。
310行で、1文字入力されるのを待ち、入力文字が E ならば終了し、以外であれば*HAJIME に戻って最初から処理する。
330行で、x方向とy方向の長さの縮小をする。
340〜370行で、終点の座標を計算し、線を引き、枝分かれ回数を記憶する。
380行で、繰返し回数の判断へ戻る。
A実行してみよう。
描くのに必要な値を聞いてくるので、適当な数字を入力してみよう。
例)
EDA=2,N=60,D=90,C=4,K=10,SX=.7,SY=.7
EDA=3,N=60,D=80,C=7,K=8,SX=.6,SY=.6
※STOPキーを押すと実行を終わります。画面に OK と表示されます。
B印刷してみよう。
おもしろい図形が描けたら、プリンタに紙をセットし、COPYキーを押すと、白黒印刷されます。
すばらしい作品の場合は、カラー印刷をしますので、私に声をかけて下さい。
C乱数を使ってみよう。
195行を追加し、ア)からウ)までのいずれかまたはいくつかを同時に変更し実行してみよう。実行すると -32768〜32767までの数字を聞いてくるので、範囲内の数値を入力する。
195 RANDOMIZE
ア)縮小率が一回毎に変化するようにしてみよう。
180,190行をコメント行にする。
180 'INPUT "X方向の縮小率:",SX INPUTのIの前に'を挿入する。
190 'INPUT "Y方向の縮小率:",SY
325行を追加する。x方向、y方向ともに0.5から0.9までの縮小率がランダムに得られる。
325 SX=(4*RND+5)/10:SY=(4*RND+5)/10
イ)枝分かれの角度をランダムにしてみよう。
150行をコメント行にする。
150 'INPUT "分かれる角度:",D INPUTのIの前に'を挿入する。
335行を追加する。−60度から60度までの角度がランダムに得られる。
335 R=60*RND*RAD*(-1)^E(I)
ウ)枝の色をランダムにしてみよう。
160行をコメント行にする。
160 'INPUT "枝の色:",C INPUTのIの前に'を挿入する。
225,355行を追加する。7色の色がランダムに得られる。
225 C=6*RND+1
355 C=6*RND+1
1:学年 1年 2年 3年 2:性別 男 女
3:1回目の講座(式を与えて模様を描く)の感想
4:2回目の講座(リサージュ曲線と正葉線)の感想
5:3回目の講座(フラクタル図形)の感想
6:その他の感想