``

前頁 メニュー 次頁

    行列による変形  ☆

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