[comp.lang.pascal] Iterated Function System decoder

reeder@reed.UUCP (Doug Reeder) (04/06/89)

{This is my rendition of the IFS decoding program}
{ in the January 88 Byte, p221}
{It is followed by four data files for use with it.}
{Each data table should be in a file of its own.}

PROGRAM IFS (output);
	CONST
		MaxTransformations = 20;
		xscale = 250;
		yscale = 250;
		xoffset = 5;
		yoffset = 25;

	VAR
		IFSdata : text;
		a, b, c, d, e, f, p : ARRAY[1..MaxTransformations] OF real;
		pk, x, y : real;
		n, k, h, v : integer;

	PROCEDURE ReadData;  {reads data from text file}
		VAR
			j, m : integer;
			pk, pt : real;
			filename : STRING;
	BEGIN
		filename := OldFilename('IFS data file ');
{This is a Lightspeed Pascal function.  You will have to get the filename some other way}
		reset(IFSdata, filename);
		readln(IFSdata, m);{# transformations}
		pt := 0;
		FOR j := 1 TO m DO
			BEGIN
				readln(IFSdata, a[j], b[j], c[j], d[j], e[j], f[j], pk);
				pt := pt + pk;
				p[j] := pt;
			END;
		writeln(output, 'total probability ', pt);
		p[m] := 1; {just to be sure}
	END; {ReadData}

BEGIN {IFS}
	ReadData;
	x := 0;
	y := 0;
{LS Pascal routines:}
{	SetDrawingRect(screenbits.bounds);}
{	ForeColor(GreenColor);}
{	ShowDrawing;}
	FOR n := 1 TO 5000 DO
		BEGIN
			pk := (random + 32768) / 65536; {0 <= pk < 1}
			k := 1;
			WHILE pk > p[k] DO
				k := k + 1;
			x := a[k] * x + b[k] * y + e[k];
			y := c[k] * x + d[k] * y + f[k];
			IF n > 10 THEN
				BEGIN
					h := round(x * xscale) + xoffset;
					v := round(y * yscale) + yoffset;
					moveto(h, v);
					lineto(h , v );
{you can replace moveto, lineto with a plot(h,v) or}
{writeln(h, v) to see the numbers}
				END;
		END;
END.

{here are the data tables}
{Each data table should be in a file of its own,}

4
0.85 0.04 -0.04 0.85  0 1.6 0.85
-0.15 0.28 0.26 0.24 0 0.44 0.07
0.2 -0.26 0.23 0.22 0 1.6 0.07
0 0 0 0.16 0 0 0.01

3
0.5 0 0 0.5 0 0 0.34
0.5 0 0 0.5 1 0 0.33
0.5 0 0 0.5 0.5 0.5 0.33

4
0.5 0 0 0.5 0 0	 0.25
0.5 0 0	0.5 0.5	0 0.25
0.5 0 0	0.5 0 0.5 0.25
0.5 0 0	0.5 0.5	0.5 0.25

4
0.42 0.42 -0.42 0.42 0 0.2 0.4
0.42 -0.42 0.42 0.42 0 0.2 0.4
0.1 0 0 0.1 0 0.2 0.15
0 0 0 0.5 0 0 0.05

-- 
Doug Reeder                         USENET: ...!tektronix!reed!reeder
Institute of Knowledge              BITNET: reeder@reed.BITNET
Jinx                             from ARPA: tektronix!reed!reeder@berkeley.EDU
reeder@knowledge.JINX               Box 971 Reed College,Portland,OR 97202