行列による変形

draw文による変形の指定には,scale,shiftなどの組込みの変形関数のほかに,4行4列の行列を用いることもできる。
組込みの変形関数の合成ではアフィン変換しか実現できないが,行列を用いると射影変換が可能になる。

Aを DIM A(4,4) で宣言された4行4列の行列とするとき,
DRAW a_pict WITH A
を実行すると,a_pictを描くとき,x座標,y座標をそれぞれ,
x'=(A(1,1)*x + A(2,1)*y + A(4,1)) / (A(1,4)*x + A(2,4)*y + A(4,4))
y'=(A(1,2)*x + A(2,2)*y + A(4,2)) / (A(1,4)*x + A(2,4)*y + A(4,4))
に変換する。

例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

変形の合成と行列の積は同じ効果を持つ。
変形の合成を行列の積で計算することができる。

★ 行列を用いて指定される変換がアフィン的でないとき,独自拡張の組込み絵定義 DRAW GRID,DRAW AXES,DRAW CIRCLE,DRAW DISKは正しく動作しないことがある。