前頁 メニュー 次頁
行列による変形 ☆
draw文による変形の指定には,scale,shiftなどの組込みの変形関数のほかに,4行4列の行列を用いることもできる。
aを DIM a(4,4) で宣言された4行4列の行列とするとき,
aの第4列が上から順に0,0,0,1であるとき,
DRAW a_pict WITH a
を実行すると,a_pictを描くとき,x座標,y座標をそれぞれ,
a(1,1)*x + a(2,1)*y + a(4,1)
a(1,2)*x + a(2,2)*y + a(4,2)
に変換する。
例5
100 DECLARE EXTERNAL PICTURE a_pict
110 DIM a(4,4)
120 MAT READ a
130 DATA 1, 2, 0, 0
140 DATA 0.8, 0.5, 0, 0
150 DATA 0, 0, 1, 0
160 DATA 1, -2, 0, 1
170 SET WINDOW -4,4,-4,4
180 DRAW a_pict WITH a
190 END
200 EXTERNAL PICTURE a_pict
210 PLOT AREA : 0,0; 1,0; 1,1; 0,0
220 END PICTURE
変形関数と4行4列の行列を混ぜて使うこともできる。
例 180 DRAW a_pict WITH SHIFT(-1,1)*a
変形の合成と行列の積は同じ効果を持つ。変形の合成を行列の積で計算することができる。
例6 aをn回合成した変形
100 DECLARE EXTERNAL PICTURE circle
110 DIM a(4,4),b(4,4)
120 MAT READ a
130 DATA 1, 2, 0, 0
140 DATA 0.8, 0.5, 0, 0
150 DATA 0, 0, 1, 0
160 DATA 1, -2, 0, 1
170 MAT b=IDN !単位行列
180 INPUT n
190 FOR i=1 TO n
200 MAT b=b*a
210 NEXT i
220 SET WINDOW -10,10,-10,10
230 DRAW circle WITH b
240 END
900 EXTERNAL PICTURE circle
910 FOR t=0 TO 2*pi STEP pi/180
920 PLOT LINES:cos(t),sin(t);
930 NEXT t
940 END PICTURE
変換行列Aの第4列が,上から順に0,0,0,1でないときは,
(そうである場合も含めて)
行列演算(x y 0 1)A の実行結果を (x' y' z' c) とするとき,
x'/c,y'/c を変換結果の座標とする。
★ 上述の場合,独自拡張の組込み絵定義 DRAW GRID,DRAW AXES,DRAW CIRCLE,DRAW DISKは正しく動作しないことがある。