program julia_animation; {Creates an animation of Julia sets. This is like a combination of 'mset_animation' and 'julia_col'.} uses crt, graph; var xcorner, y2corner, x2corner, ycorner: real; xsize, ysize, k, i, xgap, ygap, max: integer; ca, cb, cd, za2, za1, za, zb, b1, b2: real; gd, gm, Size, counter: integer; count, del, del2: word; A,B,C,D,E,F,G,H,J, L,M,N,O,P,Q,R,S,T,U,V: pointer; procedure iterate; begin count := 0; za2 := za; while 1=1 do begin za1 := za2; za2 := (za1 * za1 - zb * zb) + ca; zb := za1 * zb * 2 + cb; IF za2 * za2 + zb * zb > 4 THEN EXIT; count := count + 1; IF count > max THEN EXIT end; END; procedure main; begin gd := Detect; InitGraph(gd, gm, 'd:\tp\bgi'); xcorner := -2; y2corner := 2; x2corner := 2; ycorner := -2; setcolor(white); max := 200; xsize := 200; ysize := 200; xgap := 0; ygap := 0; del := 0; del2 := del; {CLS} Size := ImageSize(0, ysize, xsize, 0); GetMem(A,Size); Getmem(B,Size); Getmem(C,Size); Getmem(D,Size); Getmem(E,Size); Getmem(F,Size); Getmem(G,Size); Getmem(H,Size); Getmem(J,Size); Getmem(L,Size); counter := 1; cb := 2.5 - 0.75 * 0; {We did juliafi2.pas in stages, like in mset_animation. For each part, increase the '0' in the line above by 1. The 0.75 is the increment we decided on. The 'cb' values in the lines above and below can be changed to make the corresponding points on the M set move along a different axis. The cb's can be swapped for ca's in the line above and two lines below and ca for cb (in the line marked (*)) to produce a different animation} cd := cb - 0.75; while cb > cd do begin FOR k := ysize downTO 1 do FOR i := 1 TO xsize do begin za := (i / xsize) * (x2corner - xcorner) + xcorner; zb := (k / ysize) * (y2corner - ycorner) + ycorner; ca := 0; iterate; if count < 5 then count := 5; if count >= max then count := 5; setcolor(count - 5); LINE (xgap + i, ygap + ysize- k, xgap+i, ygap +ysize- k); end; if counter = 1 then getimage(0,ysize,xsize,0, A^); if counter = 2 then getimage(0,ysize,xsize,0, B^); if counter = 3 then getimage(0,ysize,xsize,0, C^); if counter = 4 then getimage(0,ysize,xsize,0, D^); if counter = 5 then getimage(0,ysize,xsize,0, E^); if counter = 6 then getimage(0,ysize,xsize,0, F^); if counter = 7 then getimage(0,ysize,xsize,0, G^); if counter = 8 then getimage(0,ysize,xsize,0, H^); if counter = 9 then getimage(0,ysize,xsize,0, J^); if counter = 10 then getimage(0,ysize,xsize,0, L^); counter := counter + 1; cb:= cb - 0.075; cleardevice; end; repeat cleardevice; putimage(0,0, A^, NormalPut); delay(del); putimage(0,0, B^, NormalPut); delay(del); putimage(0,0, C^, NormalPut); delay(del); putimage(0,0, D^, NormalPut); delay(del); putimage(0,0, E^, NormalPut); delay(del); putimage(0,0, F^, NormalPut); delay(del); putimage(0,0, G^, NormalPut); delay(del); putimage(0,0, H^, NormalPut); delay(del); putimage(0,0, J^, NormalPut); delay(del); putimage(0,0, L^, NormalPut); delay(del); readln(del); if del = 0 then del := del2; until del = 1; end; begin main; end.