//use with evaldraw: http://advsys.net/ken/download.htm static maxIter=30, maxDepth=15; (x,y){ static binit=1; static frm=-1,mx,my,mr2; if(frm=Ntrns) return; trns[i][tcx]=scx; trns[i][tcy]=scy; trns[i][trr]=ss*cos(sa); trns[i][tir]=ss*sin(sa); trns[i][tis]=abs(1/ss); } enum {Npq=256}; //enum {cx=0,cy=1,cs=2,cd=3}; deifs(x,y){ maxdist=100.0; //priority queue auto pqx[Npq];//x auto pqy[Npq];//y auto pqs[Npq];//1/accumulated_scale auto pqd[Npq];//distance auto pqh[Npq];//depth stptr=0;//pointer in the priority queu bvr=1.47;//bounding volume (a disc centered at 0,0) radius bvrm=100;//controls the smoothness of the DE field (lower values faster, higher values smoother) {//insert first instance in queue pqx[stptr]=x; pqy[stptr]=y; pqs[stptr]=1; pqd[stptr]=sqrt(x*x+y*y)-bvr; maxdist=min(maxdist,pqd[stptr]+2*bvr); pqh[stptr]=0; stptr++; } bNoExit=(x*x+y*ymaxDepth) break; stptr--; x=pqx[stptr]; y=pqy[stptr];s=pqs[stptr];ad=pqd[stptr]; } //generate and insert its children in priority queue for(j=0;jmaxdist) continue; maxdist=min(maxdist,pqd[stptr]+2*bvr*pqs[stptr]); pqh[stptr]=depth+1; //insert the childe at its place ptr=stptr; imm=0; while(ptr>0){ if(pqd[ptr]>pqd[ptr-1]){//swap k=pqx[ptr]; pqx[ptr]=pqx[ptr-1]; pqx[ptr-1]=k; k=pqy[ptr]; pqy[ptr]=pqy[ptr-1]; pqy[ptr-1]=k; k=pqs[ptr]; pqs[ptr]=pqs[ptr-1]; pqs[ptr-1]=k; k=pqd[ptr]; pqd[ptr]=pqd[ptr-1]; pqd[ptr-1]=k; k=pqh[ptr]; pqh[ptr]=pqh[ptr-1]; pqh[ptr-1]=k; ptr--;imm++; } else break; } mm=mm+imm;ii++; stptr++; } d=pqd[stptr-1];x=pqx[stptr-1];y=pqy[stptr-1];s=pqs[stptr-1]; bNoExit=(x*x+y*y