0x9d8b…e1ea

All memos sent from and to 0x9d8b…e1ea.

Field Recordings is a collection of observations. Each observation depicts an intangible entity and hints at the greater environment which spawned it. Each token is accompanied by a unique signed physical plot which can be claimed for the price of shipping. Details can be found on the project website.
p5.disableFriendlyErrors=!0;class Random{constructor(){this.useA=!1;let $=function($){let e=parseInt($.substr(0,8),16),r=parseInt($.substr(8,8),16),n=parseInt($.substr(16,8),16),l=parseInt($.substr(24,8),16);return function(){n|=0;let $=((e|=0)+(r|=0)|0)+(l|=0)|0;return l=l+1|0,e=r^r>>>9,r=n+(n<<3)|0,n=(n=n<<21|n>>>11)+$|0,($>>>0)/4294967296}};this.prngA=new $(tokenData.hash.substr(2,32)),this.prngB=new $(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}rd(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}}function setup(){aspect=420/297,unit=1200,noiseSeed(floor(1e9*R.rd())),noLoop(),gen_pts=[],pts1=[],pts2=[],pr=R.rd(),pr2=(6*R.rd()/7+floor(7*pr)/7+1/7)%1,pts1=fitPts(pts1=pr<1/7?linePts(8e3):pr<2/7?spiralPts(8e3):pr<3/7?walkPts(8e3):pr<4/7?sinePts(8e3):pr<5/7?polyPts(8e3):pr<6/7?directedPts(8e3):flowPts(8e3)),pts2=fitPts(pts2=pr2<1/7?linePts(8e3):pr2<2/7?spiralPts(8e3):pr2<3/7?walkPts(8e3):pr2<4/7?sinePts(8e3):pr2<5/7?polyPts(8e3):pr2<6/7?directedPts(8e3):flowPts(8e3)),gen_pts=[];for(let $=0;$<pts1.length;$++)x=.6*pts1[$][0]+.4*pts2[$][0],y=.6*pts1[$][1]+.4*pts2[$][1],gen_pts.push([x,y]);gen_pts=fitPts(gen_pts)}function linePts($){out_pts=[],num_lines=12,line_counts=[],sum=0,exp_weight=.18+.04*R.rd();for(let e=0;e<num_lines;e++)line_counts[e]=exp(e*exp_weight),sum+=exp(e*exp_weight);count=0;for(let r=0;r<num_lines;r++)count+=floor(line_counts[r]/sum*$),line_counts[r]=floor(line_counts[r]/sum*$);for(;count<$;)line_counts[floor(R.rd()*line_counts.length)]++,count++;for(let n=0;n<num_lines;n++){x=R.rd();for(let l=0;l<line_counts[n];l++)y=map(l,0,line_counts[n]-1,0,aspect),out_pts.push([x,y])}return out_pts}function spiralPts($){out_pts=[],num_lines=3,line_counts=[],sum=0;for(let e=0;e<num_lines;e++)line_counts[e]=exp(e),sum+=exp(e);count=0;for(let r=0;r<num_lines;r++)count+=floor(line_counts[r]/sum*$),line_counts[r]=floor(line_counts[r]/sum*$);for(;count<$;)line_counts[floor(R.rd()*line_counts.length)]++,count++;for(let n=0;n<num_lines;n++){cx=map(R.rd(),0,1,.3,.7),cy=map(R.rd(),0,1,.3,aspect-.3),th=R.rd()*TWO_PI,th_max=map(R.rd(),0,1,16,32)*PI,r_max=.3+.2*R.rd();for(let l=0;l<line_counts[n];l++)x=cx+(rad=map(l,0,line_counts[n]-1,0,r_max))*cos(theta=map(l,0,line_counts[n],th,th+th_max)),y=cy+rad*sin(theta),out_pts.push([x,y])}return out_pts}function sinePts($){out_pts=[],num_lines=8,line_counts=[],sum=0,exp_weight=.28+.04*R.rd();for(let e=0;e<num_lines;e++)line_counts[e]=exp(e*exp_weight),sum+=exp(e*exp_weight);count=0;for(let r=0;r<num_lines;r++)count+=floor(line_counts[r]/sum*$),line_counts[r]=floor(line_counts[r]/sum*$);for(;count<$;)line_counts[floor(R.rd()*line_counts.length)]++,count++;for(let n=0;n<num_lines;n++){sine_mag=.2+.2*R.rd(),sine_freq=TWO_PI*(2*R.rd()+1),right=.5>R.rd(),cy=map(R.rd(),0,1,sine_mag,aspect-sine_mag);for(let l=0;l<line_counts[n];l++)y=cy+sine_mag*sin(sine_freq*(x=right?map(l,0,line_counts[n]-1,0,1):map(l,0,line_counts[n]-1,1,0))),out_pts.push([x,y])}return out_pts}function walkPts($){out_pts=[],num_lines=20,line_counts=[],sum=0;for(let e=0;e<num_lines;e++)line_counts[e]=exp(.1*e),sum+=exp(.1*e);count=0;for(let r=0;r<num_lines;r++)count+=floor(line_counts[r]/sum*$),line_counts[r]=floor(line_counts[r]/sum*$);for(;count<$;)line_counts[floor(R.rd()*line_counts.length)]++,count++;cx=R.rd(),cy=R.rd()*aspect;for(let n=0;n<num_lines;n++){cx2=R.rd(),cy2=R.rd()*aspect;for(let l=0;l<line_counts[n];l++)x=map(l,0,line_counts[n]-1,cx,cx2),y=map(l,0,line_counts[n]-1,cy,cy2),out_pts.push([x,y]);cx=cx2,cy=cy2}return out_pts}function polyPts($){out_pts=[],num_lines=8,line_counts=[],sum=0;for(let e=0;e<num_lines;e++)line_counts[e]=exp(.3*e),sum+=exp(.3*e);count=0;for(let r=0;r<num_lines;r++)count+=floor(line_counts[r]/sum*$),line_counts[r]=floor(line_counts[r]/sum*$);for(;count<$;)line_counts[floor(R.rd()*line_counts.length)]++,count++;for(let n=0;n<num_lines;n++){rad=.3*R.rd()+.2,cx=map(R.rd(),0,1,rad,1-rad),cy=map(R.rd(),0,1,rad,aspect-rad),num_sides=floor(6*R.rd()+3),vertices=[],ctheta=R.rd()*TWO_PI;for(let l=0;l<num_sides;l++)x=cx+rad*cos((theta=map(l,0,num_sides,0,TWO_PI))+ctheta),y=cy+rad*sin(theta+ctheta),vertices.push([x,y]);for(let _=0;_<line_counts[n];_++)index=map(_,0,line_counts[n]-1,0,num_sides),x1=vertices[floor(index)%num_sides][0],y1=vertices[floor(index)%num_sides][1],x2=vertices[ceil(index)%num_sides][0],y2=vertices[ceil(index)%num_sides][1],x=(w=index-floor(index))*x2+(1-w)*x1,y=w*y2+(1-w)*y1,out_pts.push([x,y])}return out_pts}function directedPts($){out_pts=[],num_lines=6,line_counts=[],sum=0;for(let e=0;e<num_lines;e++)line_counts[e]=exp(.4*e),sum+=exp(.4*e);count=0;for(let r=0;r<num_lines;r++)count+=floor(line_counts[r]/sum*$),line_counts[r]=floor(line_counts[r]/sum*$);for(;count<$;)line_counts[floor(R.rd()*line_counts.length)]++,count++;t=1e7*R.rd();for(let n=0;n<num_lines;n++){x=map(R.rd(),0,1,.4,.6),y=map(R.rd(),0,1,.4*aspect,.6*aspect),theta=R.rd()*TWO_PI,v=.001*$/line_counts[n];for(let l=0;l<line_counts[n];l++)theta+=5*v*(noise(60,t)-.5),x+=v*cos(theta),y+=v*sin(theta),out_pts.push([x,y,0]),t+=10*v}return out_pts}function flowPts($){out_pts=[],num_lines=8,line_counts=[],sum=0;for(let e=0;e<num_lines;e++)line_counts[e]=exp(.3*e),sum+=exp(.3*e);count=0;for(let r=0;r<num_lines;r++)count+=floor(line_counts[r]/sum*$),line_counts[r]=floor(line_counts[r]/sum*$);for(;count<$;)line_counts[floor(R.rd()*line_counts.length)]++,count++;for(let n=0;n<num_lines;n++){x=map(R.rd(),0,1,.1,.9),y=map(R.rd(),0,1,.1*aspect,.9*aspect),v=.001*$/line_counts[n],offset=1e6*R.rd();for(let l=0;l<line_counts[n];l++)vx=v*(noise(3*x,3*y,offset)-.5),vy=v*(noise(3*x,3*y,offset+10)-.5),x+=vx,y+=vy,out_pts.push([x,y,0])}return out_pts}function fitPts($){out_pts=[],min_x=$[0][0],max_x=$[0][0],min_y=$[0][1],max_y=$[0][1];for(let e=0;e<$.length;e++)$[e][0]<min_x&&(min_x=$[e][0]),$[e][0]>max_x&&(max_x=$[e][0]),$[e][1]<min_y&&(min_y=$[e][1]),$[e][1]>max_y&&(max_y=$[e][1]),out_pts[e]=[];for(let r=0;r<$.length;r++)x=map($[r][0],min_x,max_x,0,1),y=map($[r][1],min_y,max_y,0,aspect),out_pts[r][0]=x,out_pts[r][1]=y;return out_pts}function genPoly3($,e){let r=[];num_pts=100,t_max=100,v=.02,nls=5,line1=[];let n=$,l=e;n_scale=1;for(let _=0;_<t_max;_++)line1.push([n,l]),nx=n_scale*(noise(nls*n,nls*l,0)-.5),ny=n_scale*(noise(nls*n,nls*l,10)-.5),nnx=n_scale*(noise(nls*nx,nls*nx,40)-.5),nny=n_scale*(noise(nls*nx,nls*nx,50)-.5),n+=v*nx,l+=v*ny;line2=[],n=$,l=e,n_scale=1;for(let o=0;o<t_max;o++)line2.push([n,l]),nx=n_scale*(noise(nls*n,nls*l,20)-.5),ny=n_scale*(noise(nls*n,nls*l,30)-.5),nnx=n_scale*(noise(nls*nx,nls*nx,60)-.5),nny=n_scale*(noise(nls*nx,nls*nx,70)-.5),n+=v*nx,l+=v*ny;for(let s=0;s<num_pts;s++)l1=.5+.5*cos(theta=map(s,0,num_pts-1,0,TWO_PI)),l2=.5+.5*sin(theta),i1=floor((line1.length-2)*l1),w1=1-((line1.length-2)*l1-floor((line1.length-2)*l1)),i2=floor((line2.length-2)*l2),w2=1-((line2.length-2)*l2-floor((line2.length-2)*l2)),n=(line1[i1][0]*w1+line1[i1+1][0]*(1-w1)+line2[i2][0]*w2+line2[i2+1][0]*(1-w2))/2,r.push([n,l=(line1[i1][1]*w1+line1[i1+1][1]*(1-w1)+line2[i2][1]*w2+line2[i2+1][1]*(1-w2))/2]);return r}function on_segment($,e,r,n,l,_){return!!(r<=max($,l)&&r>=min($,l)&&n<=max(e,_)&&n>=min(e,_))}function orient($,e,r,n,l,_){let o=(n-e)*(l-r)-(r-$)*(_-n);return o>0?1:o<0?2:0}function intersect($,e,r,n,l,_,o,s){return($!=l||e!=_)&&($!=o||e!=s)&&(r!=l||n!=_)&&(r!=o||n!=s)&&(o1=orient($,e,r,n,l,_),o2=orient($,e,r,n,o,s),o3=orient(l,_,o,s,$,e),o4=orient(l,_,o,s,r,n),!!(o1!=o2&&o3!=o4||0==o1&&on_segment($,e,l,_,r,n)||0==o2&&on_segment($,e,o,s,r,n)||0==o3&&on_segment(l,_,$,e,o,s)||0==o4&&on_segment(l,_,r,n,o,s)))}function intersect_pt($,e,r,n,l,_,o,s){let f=r-$,h=n-e,i=o-l,u=s-_,d;return[(d=0==i?(l-$)/(r-$):(_-e+($-l)*u/i)/(h-f*u/i))*f+$,d*h+e]}function draw(){poly_list=[],poly_limits=[],count=0,count2=0,p=[color(0),color(0),color(0)],layer_size=[3e3,3e3,3e3],weights=[.5,.5,.5],max_intersections=1,edge_dict={},dict_size=200,x1=margin=.03,x2=1-margin,y1=margin,xgmin=floor(x1*dict_size),xgmax=floor(x2*dict_size),yg=floor(y1*dict_size);let $=1/.3,e=297*$,r=420*$,n="http://www.w3.org/2000/svg",l=document.createElementNS(n,"svg");l.setAttribute("width","100vw"),l.setAttribute("height","100vh"),l.setAttribute("viewBox","0 0 "+e+" "+r),l.setAttribute("style","background-color:white;");let _=document.createElementNS(n,"path");_.setAttribute("d",`M 0 0 M ${e} ${r}`),l.appendChild(_);let o=document.createElementNS(n,"g");o.setAttribute("id","1000000layer"),o.setAttribute("style","fill:none;stroke-width:1;stroke:rgb(0%,0%,0%);");for(let s=0;s<gen_pts.length;s++){let f;poly=genPoly3(gen_pts[s][0],gen_pts[s][1]),start_index=62,final_poly=[poly[start_index]],has_intersections=!1,num_intersections=0;for(let h=0;h<poly.length&&!has_intersections;h++){x1=poly[(h+start_index)%poly.length][0],y1=poly[(h+start_index)%poly.length][1],x2=poly[(h+start_index+1)%poly.length][0],y2=poly[(h+start_index+1)%poly.length][1],xg=floor(x1*dict_size),yg=floor(y1*dict_size),xg2=floor(x2*dict_size),yg2=floor(y2*dict_size);for(let i=min(xg,xg2);i<=max(xg,xg2);i++)for(let u=min(yg,yg2);u<=max(yg,yg2);u++)if([i,u]in edge_dict)for(let d=0;d<edge_dict[[i,u]].length;d++)intersect(x1,y1,x2,y2,edge_dict[[i,u]][d][0],edge_dict[[i,u]][d][1],edge_dict[[i,u]][d][2],edge_dict[[i,u]][d][3])&&(count++,++num_intersections==max_intersections&&(final_poly.push(intersect_pt(x1,y1,x2,y2,edge_dict[[i,u]][d][0],edge_dict[[i,u]][d][1],edge_dict[[i,u]][d][2],edge_dict[[i,u]][d][3])),has_intersections=!0));has_intersections||final_poly.push([x2,y2])}if(has_intersections){has_intersections=!1,num_intersections=0;for(let g=0;g<poly.length&&!has_intersections;g++){x1=poly[(-g+start_index+2*poly.length)%poly.length][0],y1=poly[(-g+start_index+2*poly.length)%poly.length][1],x2=poly[(-g+start_index+2*poly.length-1)%poly.length][0],y2=poly[(-g+start_index+2*poly.length-1)%poly.length][1],xg=floor(x1*dict_size),yg=floor(y1*dict_size),xg2=floor(x2*dict_size),yg2=floor(y2*dict_size);for(let c=min(xg,xg2);c<=max(xg,xg2);c++)for(let P=min(yg,yg2);P<=max(yg,yg2);P++)if([c,P]in edge_dict)for(let a=0;a<edge_dict[[c,P]].length;a++)intersect(x1,y1,x2,y2,edge_dict[[c,P]][a][0],edge_dict[[c,P]][a][1],edge_dict[[c,P]][a][2],edge_dict[[c,P]][a][3])&&++num_intersections==max_intersections&&(final_poly.splice(0,0,intersect_pt(x1,y1,x2,y2,edge_dict[[c,P]][a][0],edge_dict[[c,P]][a][1],edge_dict[[c,P]][a][2],edge_dict[[c,P]][a][3])),has_intersections=!0);has_intersections||final_poly.splice(0,0,[x2,y2])}}for(let b=0;b<final_poly.length-1;b++){x1=final_poly[b][0],y1=final_poly[b][1],x2=final_poly[b+1][0],y2=final_poly[b+1][1],xg=floor(x1*dict_size),yg=floor(y1*dict_size),xg2=floor(x2*dict_size),yg2=floor(y2*dict_size);for(let A=min(xg,xg2);A<=max(xg,xg2);A++)for(let m=min(yg,yg2);m<=max(yg,yg2);m++)[A,m]in edge_dict?edge_dict[[A,m]].push([x1,y1,x2,y2]):edge_dict[[A,m]]=[[x1,y1,x2,y2]]}poly_list.push(final_poly)}min_x=poly_list[0][0][0],max_x=poly_list[0][0][0],min_y=poly_list[0][0][1],max_y=poly_list[0][0][1],mean_x=0,mean_y=0,mean_x2=0,mean_y2=0,count=0;for(let k=0;k<poly_list.length;k++)for(let E=0;E<poly_list[k].length;E++)mean_x+=poly_list[k][E][0],mean_x2+=poly_list[k][E][0]**2,mean_y+=poly_list[k][E][1],mean_y2+=poly_list[k][E][1]**2,count++,poly_list[k][E][0]<min_x&&(min_x=poly_list[k][E][0]),poly_list[k][E][0]>max_x&&(max_x=poly_list[k][E][0]),poly_list[k][E][1]<min_y&&(min_y=poly_list[k][E][1]),poly_list[k][E][1]>max_y&&(max_y=poly_list[k][E][1]);mean_x/=count,mean_y/=count,mean_x2/=count,mean_y2/=count,std_x=sqrt(mean_x2-mean_x**2),std_y=sqrt(mean_y2-mean_y**2),scale_factor=1,(scale_ratio=(max_y-min_y)/(max_x-min_x))>aspect?(min_x=-(scale_factor=(max_y-min_y)/aspect)/2+(avg_x=(max_x+min_x)/2),max_x=scale_factor/2+avg_x):(min_y=-(scale_factor=max_x-min_x)*aspect/2+(avg_y=(max_y+min_y)/2),max_y=scale_factor*aspect/2+avg_y);for(let B=0;B<poly_list.length;B++)for(let C=0;C<poly_list[B].length;C++)poly_list[B][C][0]=map(poly_list[B][C][0],min_x,max_x,margin,1-margin),poly_list[B][C][1]=map(poly_list[B][C][1],min_y,max_y,margin,aspect-margin);margin=.03;for(let N=0;N<poly_list.length;N++){path_string=`M ${poly_list[N][0][0]*e} ${poly_list[N][0][1]*e}`,nonNumber=!1;for(let S=1;S<poly_list[N].length;S++)path_string+=` L ${poly_list[N][S][0]*e} ${poly_list[N][S][1]*e}`,(isNaN(poly_list[N][S][0])||isNaN(poly_list[N][S][1]))&&(nonNumber=!0);if(!nonNumber){let M=document.createElementNS(n,"path");M.setAttribute("d",path_string),o.appendChild(M)}}l.appendChild(o),noCanvas(),document.body.appendChild(l),print(tokenData.hash)}R=new Random;
var unit;p5.disableFriendlyErrors=!0,S=Uint32Array.from([0,1,s=t=2,3].map(e=>parseInt(tokenData.hash.substr(8*e+2,8),16))),R=(e=>(t=S[3],S[3]=S[2],S[2]=S[1],S[1]=s=S[0],t^=t<<11,S[0]^=t^t>>>8^s>>>19,S[0]/2**32));var pts=[],neighbors=[],density=.5,iter=0,p=[],resolution=100,flow_squares=[],grid_size=8,gen_pts=[],wrong_color_p=.5,vars=["x","y","z"],funcs=["($+$)","($-$)","(-1*$)","sin($)","sqabs($)","($*$)","cos($)"],bi=R()<.07,p_num;p_num=R()<.02?6:Math.floor(6*R()),flow_r=R(),flow_r<.94?flow_type="b":flow_r<.95?flow_type="ro":flow_r<.96?flow_type="ri":flow_r<.97?flow_type="ib":flow_r<.98?flow_type="lr":flow_type="rb";var max_size=.25;"b"==flow_type?(min_thresh=.3,max_thresh=.5,high_max_size=.275,low_max_size=.03,shape_scale=6):(min_thresh=.55,max_thresh=.7,high_max_size=.45,low_max_size=.15,shape_scale=8),"ro"==flow_type?rad_scale=2:"ri"==flow_type?rad_scale=-2:rad_scale=0;var rad_angle=0,unit;"b"==flow_type?(low_density=.3,high_density=2.5):["ri","ro"].includes(flow_type)?(low_density=.8,high_density=3):(low_density=.7,high_density=5);var x_pts=[],y_pts=[],z_pts=[],c_pts=[],p_var_inc=.3,num_trails=50,trail_length=5,margin=0;function setup(){unit=min(windowWidth,windowHeight),createCanvas(unit,unit),noiseSeed(floor(1e9*R())),strokeWeight(unit/800),0==p_num?(p=["#0b2f4d","#617613","#fea321","#f74d40","#a6184a","#4f269c"],ps=color(0),pb="#f3e0cc"):1==p_num?(p=["#05091e","#0b2f4d","#3fcfc5","#AFE9C4","#f74d40","#f3e0cc","#F7A8AB"],br=floor(R()*p.length),ps="#ffffff",pb=p[br],p.splice(br,1)):2==p_num?(p=["#2D244F","#502E50","#733750","#AD4E4C","#ff6731","#05091e"],ps="#FEFB75",br=floor(R()*p.length),pb=p[br],p.splice(br,1)):3==p_num?(p=["#2e0e31","#a6184a","#ff6731","#F7A8AB","#617613","#0f3f0f"],ps=color(0),br=floor(R()*p.length),pb=p[br],p.splice(br,1)):4==p_num?(p=["#C3D34C","#AFE9C4","#f3e0cc","#855F55","#78777C","#4C6178"],ps="#ffffff",br=floor(R()*p.length),pb=p[br],p.splice(br,1)):5==p_num?(p=["#f7c483","#855F55","#CE611F","#f3e0cc","#EDEDE9","#FFFFFF","#FFFFFF"],ps="#3C0707",br=floor(R()*(p.length-1)),print(br),pb=p[br],p.splice(br,1),5==br&&p.splice(5,1)):6==p_num&&(p[0]=color(0),p[1]="#ffffff",b_colors=["#0b2f4d","#a6184a","#AFE9C4","#f74d40"],br=floor(R()*b_colors.length),pb=color(b_colors[br]),2==br?ps=color(0):ps="#ffffff"),background(color(pb)),f_string2=genExpression(),f_string3=genExpression(),f_string4=genExpression(),f_string=genExpression();for(let e=0;e<num_trails;e++)x_pts[e]=[R()-.5],y_pts[e]=[R()-.5],z_pts[e]=[R()-.5],c_pts[e]=[];p=shuf(p);for(let i=0;i<x_pts.length;i++)for(let j=0;j<trail_length;j++)x=x_pts[i][j],y=y_pts[i][j],z=z_pts[i][j],nx=eval(f_string),ny=eval(f_string2),nz=eval(f_string3),nc=eval(f_string4),x_pts[i][j+1]=nx,y_pts[i][j+1]=ny,z_pts[i][j+1]=nz,c_pts[i][j]=nc;for(let e=0;e<x_pts.length;e++)x_pts[e].splice(0,1),y_pts[e].splice(0,1),z_pts[e].splice(0,1);for(min_x=min(x_pts.map(min)),max_x=max(x_pts.map(max)),min_x==max_x&&(min_x-=1,max_x+=1),min_y=min(y_pts.map(min)),max_y=max(y_pts.map(max)),min_y==max_y&&(min_y-=1,max_y+=1),min_z=min(z_pts.map(min)),max_z=max(z_pts.map(max)),min_z==max_z&&(min_z-=1,max_z+=1),low_scale_factor=.2,high_scale_factor=5,scale_iter=0,scale_done=!1;scale_iter<20&&!scale_done;){scale_factor=sqrt(low_scale_factor*high_scale_factor),gen_pts=[];for(let e=0;e<x_pts.length;e++)for(let t=0;t<x_pts[0].length;t++)x=map(x_pts[e][t],min_x,max_x,margin,1-margin),y=map(y_pts[e][t],min_y,max_y,margin,1-margin),z=map(z_pts[e][t],min_z,max_z,.03,.2)*scale_factor,c=c_pts[e][t],gen_pts.push([x,y,z,c]);in_count=0;for(let e=0;e<1;e+=.1)for(let t=0;t<1;t+=.1){let n=0;for(gen_count=0;gen_count<5&&n<gen_pts.length;){let s=sqrt(sq(e-gen_pts[n][0])+sq(t-gen_pts[n][1]));s<gen_pts[n][2]&&gen_count++,n++}5==gen_count&&in_count++}scale_iter++,in_count/121<min_thresh?low_scale_factor=scale_factor:in_count/121>max_thresh?high_scale_factor=scale_factor:scale_done=!0}gen_pts.sort((e,t)=>e[3]-t[3]);for(let e=0;e<gen_pts.length;e++)gen_pts[e][3]=floor(e*p.length/gen_pts.length);gen_pts=shuf(gen_pts);for(let e=0;e<1e4;e++){x=map(R(),0,1,0,1),y=map(R(),0,1,0,1),c=0;let e=0;for(gen_count=0,gen_max_size=0,gen_density_frac=0;gen_count<5&&e<gen_pts.length;){let t=sqrt(sq(x-gen_pts[e][0])+sq(y-gen_pts[e][1]));t<gen_pts[e][2]&&(gen_count++,gen_pts[e][2]-t>gen_max_size&&(gen_max_size=(gen_pts[e][2]-t)*shape_scale),(gen_pts[e][2]-t)/gen_pts[e][2]>gen_density_frac&&(gen_density_frac=(gen_pts[e][2]-t)/gen_pts[e][2],c=gen_pts[e][3])),e++}5==gen_count?(density=map(gen_density_frac,0,1,1,high_density),max_size=min([high_max_size,gen_max_size])):(density=low_density,max_size=low_max_size,c=-1);let t=max_size*R()+.001;for(is_valid=!0,e=0;is_valid&&e<pts.length;){let n=sqrt(sq(x-pts[e][0])+sq(y-pts[e][1]));-1==pts[e][3]?n<(t+pts[e][2])/density/2&&(is_valid=!1):n<(t+pts[e][2])/max(density,.45)/2&&(is_valid=!1),e++}is_valid&&pts.push([x,y,t,c])}if(pts.sort((e,t)=>t[2]-e[2]),"ib"==flow_type){rand_int=[];for(let e=0;e<grid_size;e++)rand_int[e]=floor(4*R())}for(let e=0;e<grid_size;e++){flow_squares[e]=[];for(let t=0;t<grid_size;t++)"rb"==flow_type?(theta=R()*TWO_PI,flow_squares[e][t]=[cos(theta),sin(theta)]):"lr"==flow_type?R()<.5?flow_squares[e][t]=[1,0]:flow_squares[e][t]=[-1,0]:"ib"==flow_type?(n=rand_int[t],n%4==0?flow_squares[e][t]=[1,0]:n%4==1?flow_squares[e][t]=[0,1]:n%4==2?flow_squares[e][t]=[-1,0]:flow_squares[e][t]=[0,-1]):flow_squares[e][t]=[0,0]}}function genExpression(){let e="$";for(p_var=0;e.includes("$");)R()<p_var?(v=vars[floor(vars.length*R())],e=e.replace("$",v)):(f=funcs[floor(funcs.length*R())],e=e.replace("$",f)),p_var+=p_var_inc;return e}function len(e,t,n,s){return sqrt(sq(n-e)+sq(s-t))}function shuf(e){let t=[],n=[];for(let n=0;n<e.length;n++)t[n]=[R(),e[n]];t.sort((e,t)=>e[0]-t[0]);for(let s=0;s<e.length;s++)n[s]=t[s][1];return n}function sqabs(e){return Math.sign(e)*sqrt(abs(e))}function drawBlob(e){beginShape();for(let t=0;t<e.length;t++)vertex(e[t][0]*unit,e[t][1]*unit);vertex(e[0][0]*unit,e[0][1]*unit),endShape()}function drawStripes(e){for(let e=0;e<floor(outline.length/2);e+=2)beginShape(),vertex(outline[e][0]*unit,outline[e][1]*unit),vertex(outline[e+1][0]*unit,outline[e+1][1]*unit),vertex(outline[outline.length-2-e][0]*unit,outline[outline.length-2-e][1]*unit),vertex(outline[outline.length-1-e][0]*unit,outline[outline.length-1-e][1]*unit),vertex(outline[e][0]*unit,outline[e][1]*unit),endShape()}function draw(){R()<.8?(c=pts[iter][3],c<0?c=floor(p.length*R()):R()<wrong_color_p&&(c=(c+floor((p.length-1)*R())+1)%p.length),noStroke(),fill(p[c])):(stroke(ps),noFill()),outline=[],draw_b=!0,R()<.75?res=resolution:(res=100,draw_b=!1),line_iters=[];for(let e=0;e<res;e++){for(theta=map(e,0,res,0,TWO_PI),x=pts[iter][0],y=pts[iter][1],xs=pts[iter][0],ys=pts[iter][1],total_dist=0,line_iter=0,max_dist=pts[iter][2]*(bi?.9*pow(cos(theta),4)+.1:1);total_dist<max_dist&&line_iter<1e3;)noisex=noise(5*x,5*y,0),noisey=noise(5*x,5*y,10),noisedx=noise(3*(x+.001),3*(y+.001),0),noisedy=noise(3*(x+.001),3*(y+.001),10),gradx=noise(3*(noisex+.001),3*(noisey+.001),20)-noise(3*noisex,3*noisey,20),grady=noise(3*(noisex+.001),3*(noisey+.001),30)-noise(3*noisex,3*noisey,30),rx=.01*(x-.5),ry=.01*(y-.5),dis=len(x,y,.5,.5),dis>0&&("spiral_out"==flow_type||"spiral_in"==flow_type)&&(rx/=dis,ry/=dis),x_index=(floor(x*grid_size)+grid_size)%grid_size,y_index=(floor(y*grid_size)+grid_size)%grid_size,grid_flow=flow_squares[x_index][y_index],nx=x+.1*(gradx*cos(theta)+grady*sin(theta)+.4*rad_scale*(rx*cos(rad_angle)+ry*sin(rad_angle))+.0035*grid_flow[0]),ny=y+.1*(gradx*sin(theta)-grady*cos(theta)+.4*rad_scale*(ry*cos(rad_angle)-rx*sin(rad_angle))+.0035*grid_flow[1]),total_dist+=len(x,y,nx,ny),line_iter++,x=nx,y=ny;line_iters.push(line_iter),outline.push([x,y])}draw_b?drawBlob(outline):drawStripes(outline),++iter>=pts.length&&noLoop()}