前頁  メニュー  次頁


行列による変形  ☆

  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は正しく動作しないことがある。