5 #include <tridgec/tridge.h>
12 typedef unsigned char PIXEL;
16 /*******************************************************************
18 *******************************************************************/
19 BOOL write_pix_matrix(PIXEL **mat,int size,CONST char *fname)
22 file = file_open(fname,"w");
23 fwrite((char *)&mat[0][0],sizeof(PIXEL),size*size,file);
28 /*******************************************************************
30 *******************************************************************/
31 BOOL read_pix_matrix(PIXEL **mat,int size,CONST char *fname)
34 file = file_open(fname,"r");
35 fread((char *)&mat[0][0],sizeof(PIXEL),size*size,file);
41 /*******************************************************************
42 make a 2 D pixel matrix
43 ********************************************************************/
44 PIXEL **pmatrix2D(int dim1,int dim2)
49 ret = (PIXEL **)any_matrix(2,sizeof(PIXEL),dim1,dim2);
50 if (ret == NULL) return(NULL);
64 int main(int argc,char *argv[])
66 float a[4],b[4],c[4],d[4],e[4],f[4];
75 fprintf(debugfile,"Usage: %s N niter read_in base_colour\n",argv[0]);
80 NUM_ITTR = atoi(argv[2]);
81 read_in = atoi(argv[3]);
84 xStartDisplay(N,N,argc,argv);
86 oldimage = pmatrix2D(N,N);
87 newimage = pmatrix2D(N,N);
90 if ((oldimage == NULL) || (newimage == NULL))
92 fprintf(debugfile,"Help!!!");
96 /* initialize the transformation values */
98 a[0] = 0 ; a[1] = 0.85 ; a[2] = 0.2 ; a[3] = -0.15 ;
99 b[0] = 0 ; b[1] = 0.04 ; b[2] = -0.26 ; b[3] = 0.28;
100 c[0] = 0 ; c[1] = -0.04 ; c[2] = 0.23 ; c[3] = 0.26;
101 d[0] = 0.16 ; d[1] = 0.85 ; d[2] = 0.22 ; d[3] = 0.24;
102 e[0] = 0 ; e[1] = 0 ; e[2] = 0 ; e[3] = 0 ;
103 f[0] = 0 ; f[1] = 1.6 ; f[2] = 1.6 ; f[3] = 0.44;
107 read_pix_matrix(oldimage,N,"fern.mat");
110 /* set up initial configuration */
113 for ( i = 0 ; i < NUM_RAN ; i++)
115 randx = rand_float(0.0,N-1);
116 randy = rand_float(0.0,N-1);
117 oldimage[randx][randy] = 1;
122 for(loop=0;loop<NUM_ITTR;loop++)
125 fprintf(stdout,"Loop %d\n",loop);
127 for (j=0; j < N; j++)
130 #define OK(ii,jj) (!((ii<0) || (jj<0) || (ii>=N) || (jj>=N)))
140 ii = (a[k]*(i-ISHIFT) + b[k]*(j-JSHIFT) + e[k]*SCALE);
141 jj = (c[k]*(i-ISHIFT) + d[k]*(j-JSHIFT) + f[k]*SCALE);
145 newimage[ii][jj] = oldimage[ii][jj]+1;
158 old = oldimage[i][j];
159 new = newimage[i][j];
161 if ((old != new) && (old*new == 0))
166 xSetForeground(COL1 + new - 1);
167 xPutPoint(XOFS + i,YOFS + j);
170 oldimage[i][j] = new;
175 if ((loop % 10 == 0) || (changed == 0))
176 write_pix_matrix(oldimage,N,"fern.mat");
178 fprintf(stdout,"\n Changed pixels = %d ",changed);
179 if (changed == 0) break;
185 xWaitEvent(eKeyPress);