Transfromation with arrays

Transformation can be assigned with a 4×4 matrix instead of transform functions.

LET A be a 4×4 matrix defined by DIM A(4,4).
If   (x y 0 1)A = (x' y' z' c),
a point (x, y) is transformed to (x' / c, y' / c).


Especially, if the 4-th column is 0, 0, 0, 1,
DRAW a_pict WITH A
makes x, y transformed
A(1,1)*x + A(2,1)*y + A(4,1)
A(1,2)*x + A(2,2)*y + A(4,2)
respectively.

Example

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



Transform functions and 4×4 matrices can be mixed.
Example
180 DRAW a_pict WITH SHIFT(-1,1)*a

Composition of transformations is identical with multiplication of matrices.
Thus composition of transformation can be obtained by multiplication of matrices.
Example. A transformation of A composed n times.

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     !identity
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