0x329f3a45…702esent to0x0a1bbd57…3676·#17,180,532·view on Etherscan
let hash,R,M,mainCanvas,defaultHeight=5e3,defaultWidth=9*defaultHeight/16,saveBoolean=!1,hashPairs=[],decPairs=[],circles=[];const browserName=function(e){switch(!0){case e.indexOf("edge")>-1:return"MS Edge";case e.indexOf("edg/")>-1:return"Edge/Chromium";case e.indexOf("opr")>-1&&!!window.opr:return"Opera";case e.indexOf("chrome")>-1&&!!window.chrome:return"Chrome";case e.indexOf("trident")>-1:return"MS IE";case e.indexOf("firefox")>-1:return"Mozilla Firefox";case e.indexOf("safari")>-1:return"Safari";default:return"other"}}(window.navigator.userAgent.toLowerCase());function setup(){setupParams(),setupCanvas(),circles=createCirclePacking(100,defaultWidth*M,defaultHeight*M,params.Composition)}function draw(){switch(background(decPairs[8]%2==0?color(0,0,15):color(0,0,90)),drawGradientFrame(),push(),translate(defaultWidth/2*M,defaultHeight/2*M),push(),rotate(30*R.random_dec()*(R.random_dec()>.5?-1:1)),"On"==params.Shear&&(shearX(5*R.random_dec()*(R.random_dec()>.5?-1:1)),shearY(5*R.random_dec()*(R.random_dec()>.5?-1:1))),params.order){case"Accend":circles.sort(((e,a)=>a.diameter-e.diameter));break;case"Descend":circles.sort(((e,a)=>e.diameter-a.diameter))}let e=0;if("Back"==params.Spot)for(let a of circles)e++<100&&drawSpot(a.x,a.y,6*a.diameter,100);drawingContext.shadowColor=color(0,0,0,33),drawingContext.shadowBlur=M*defaultHeight/50;for(let e of circles)recursiveArc(e.x,e.y,0,360,0,3*e.diameter,3);if("Front"==params.Spot)for(let a of circles)e++<100&&drawSpot(a.x,a.y,6*a.diameter,100);pop(),pop(),push(),translate(defaultWidth/2*M,defaultHeight/2*M),drawPostEffect(),pop(),noLoop(),saveBoolean&&save("Marching_Resonances_"+hash+".png")}function drawGradientFrame(){let e=360*R.random_dec(),a=R.random_dec()*defaultWidth*M/2,r=R.random_dec()*defaultHeight*M/2;if(push(),strokeWeight(.5*M),"On"==params.Frame){for(let o=0;o<2;o++){let t=defaultWidth/map(o,0,2,20,7)*M;if(push(),1==o){let o=360*R.random_dec(),t=drawingContext.createConicGradient(o,width/2+cos(e)*a,height/2+sin(e)*r);t.addColorStop(0,params.Colors[0]),t.addColorStop(1/3,params.Colors[1]),t.addColorStop(2/3,params.Colors[2]),t.addColorStop(1,params.Colors[0]),drawingContext.fillStyle=t}else fill(55,5,95);setupFrame(t,t,width-2*t,height-2*t),pop()}drawingContext.clip()}}function setupParams(){hash=tokenData.hash,seed=parseInt(hash.slice(0,16),16),noiseSeed(seed),randomSeed(seed);for(let e=0;e<32;e++)hashPairs.push(hash.slice(2+2*e,4+2*e));decPairs=hashPairs.map((e=>parseInt(e,16))),params=getParams(decPairs)}function setupCanvas(){let e,a;saveBoolean?(e=9*defaultHeight/16,a=defaultHeight):(e=9*windowHeight/16,a=windowHeight),mainCanvas=createCanvas(e,a),colorMode(HSB,360,100,100,100),angleMode(DEGREES),smooth(),pixelDensity(1),grainBuffer=createGraphics(width,height,WEBGL),grainShader=grainBuffer.createShader(vert,frag),M=height/defaultHeight,R=new Random}function keyPressed(){"s"!=key&&"S"!=key||(saveBoolean=!0,setup(),draw())}class Random{constructor(){this.useA=!1;let e=function(e){let a=parseInt(e.substr(0,8),16),r=parseInt(e.substr(8,8),16),o=parseInt(e.substr(16,8),16),t=parseInt(e.substr(24,8),16);return function(){a|=0,r|=0,o|=0,t|=0;let e=(a+r|0)+t|0;return t=t+1|0,a=r^r>>>9,r=o+(o<<3)|0,o=o<<21|o>>>11,o=o+e|0,(e>>>0)/4294967296}};this.prngA=new e(hash.substr(2,32)),this.prngB=new e(hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,a){return e+(a-e)*this.random_dec()}random_int(e,a){return Math.floor(this.random_num(e,a+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}function getParams(e){const a=["On","Off"],r=["Curve","Straight","Mix"],o=["Conic","Radial","Mix","Solid"],t=["Accend","Descend","Mix"],n=colorScheme[e[1]%colorScheme.length];let i=e[10]%9,d=e[12]%9;switch(i){case 0:case 1:case 2:case 3:case 4:case 5:case 6:i=t[0];break;case 7:i=t[1];break;case 8:i=t[2]}switch(d){case 0:case 2:case 4:case 6:d=r[0];break;case 1:case 3:case 5:case 7:d=r[2];break;case 8:d=r[1]}return{Frame:e[0]%10>3?"On":"Off",Palette:n.name,Colors:n.colors,Composition:e[2]%10>5?"Random":"Packing",Shear:a[e[3]%a.length],Shape:r[e[8]%r.length],Order:i,Gradient:o[e[5]%o.length],Constant:1+e[12]%10,Spot:e[13]%2==0?"Back":"Front"}}const colorScheme=[{name:"Golden Thread Butterfly",colors:["#f19b4e","#7f6640","#dc5845","#e4d6c8","#929e79","#472c2a"]},{name:"Navy Lion Peony",colors:["#83834f","#e0c786","#30363d","#db2f38","#66989c","#e9ded1"]},{name:"Charcoal Wind",colors:["#151015","#511a28","#8e563a","#fcfbfa","#bf9969","#718282"]},{name:"Wisteria Spring",colors:["#e6bc8a","#da4742","#202125","#909062","#dba380","#dcc6b9"]},{name:"Fragrant Ground",colors:["#73924d","#eb9f48","#b19564","#aabcb2","#f0e3d7","#6b4b2b"]},{name:"Lagenaria Siceraria",colors:["#f0ebe1","#d8ccb3","#cd2a41","#8bc08f","#f69fac","#c4714c"]},{name:"Tang grass",colors:["#f9f5ec","#d8ae6a","#d4824b","#588c92","#89bfb3","#b55847"]},{name:"Pearl and Dragon",colors:["#dad7c3","#c7895a","#343530","#899c63","#60827d","#d6b58a"]},{name:"Red Dragon",colors:["#e5e9e9","#da2034","#8db4bb","#4f6a31","#6ab26d","#e4bc89"]},{name:"Phoenix Peony",colors:["#3c3e46","#ddded7","#c07552","#5b6984","#809c73","#c3ae98"]},{name:"Kara Ori",colors:["#4d4638","#f77843","#fbc836","#d8b85a","#6c6e47","#b0e3ee"]},{name:"Yu-Zen Dyeing",colors:["#f5da30","#338ab6","#8a8740","#73563f","#332321","#e0dfdf"]},{name:"Bird and Flower",colors:["#abb163","#e9e1cb","#9b7c4a","#74a7a0","#e46641","#5a5925"]},{name:"Japanese Ink",colors:["#000000","#aaaaaa","#7f7f7f","#c9c9c9","#ffffff","#7f6640"]}],vert="\nprecision highp float;\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvarying vec2 vVertTexCoord;\nvoid main(void) {\n vec4 positionVec4 = vec4(aPosition, 1.0);\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n vVertTexCoord = aTexCoord;\n}\n",frag="\nprecision highp float;\nvarying vec2 vVertTexCoord;\n\nuniform sampler2D source;\nuniform float noiseSeed;\nuniform float noiseAmount;\n\nfloat rand(vec2 n) { \n return fract(sin(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);\n}\n\nvoid main() {\n // GorillaSun's grain algorithm\n vec4 inColor = texture2D(source, vVertTexCoord);\n gl_FragColor = clamp(inColor + vec4(\n mix(-noiseAmount, noiseAmount, fract(noiseSeed + rand(vVertTexCoord * 1981.820))),\n mix(-noiseAmount, noiseAmount, fract(noiseSeed + rand(vVertTexCoord * 1990.116))),\n mix(-noiseAmount, noiseAmount, fract(noiseSeed + rand(vVertTexCoord * 2020.118))),\n 0.\n ), 0., 1.);\n}\n";function setupFrame(e,a,r,o){drawFrame(createPoints(e,a,r,o))}function createPoints(e,a,r,o){let t=[createVector(e,a),createVector(e+r,a),createVector(e+r,a+o),createVector(e,a+o)],n=[];for(let e=0;e<t.length;e++){let a=t[e],i=t[(e+1)%t.length],d="On"==params.Shear?min(r,o)/50:0;for(let e=0;e<1;e+=.1){let t=p5.Vector.lerp(a,i,e),s=noise(r/2+t.x/r,o/2+t.y/o)*TWO_PI;t.add(p5.Vector.fromAngle(s).mult(d)),n.push(t)}}return n}function drawFrame(e){strokeWeight(.5*M),stroke(0,0,20),beginShape();for(let a=0;a<e.length;a++)vertex(e[a%e.length].x,e[a%e.length].y);endShape(CLOSE)}function createCirclePacking(e,a,r,o){let t=[];if("Random"==o)for(let o=0;o<e/2;o++){let e={x:(R.random_dec()-.5)*a,y:(R.random_dec()-.5)*r,diameter:r/15+R.random_dec()*r/15};t.push(e)}else{let o=0,n=100;for(;t.length<e;){let e={x:(R.random_dec()-.5)*a,y:(R.random_dec()-.5)*r,diameter:r/15+R.random_dec()*r/15},i=!0;for(let a of t)if(dist(e.x,e.y,a.x,a.y)<(e.diameter+a.diameter)/2){i=!1;break}if(i&&t.push(e),o++,o>n)break}}return t}function recursiveArc(e,a,r,o,t,n,i){if(i<0)return;if(r>o){let e=r;r=o,o=e}if(t>n){let e=t;t=n,n=e}push(),translate(e,a);let d=1e3*R.random_dec(),s=1e3*R.random_dec(),c=90*noise(d,s),l=r+(sin(d+a/100+c*i)/2+.5)*(o-r),f=t+(cos(s+e/100+c*i)/2+.5)*(n-t);0==i?(drawArc(0,0,r,l,t,f),drawArc(0,0,l,o,t,f),drawArc(0,0,r,l,f,n),drawArc(0,0,l,o,f,n)):(recursiveArc(0,0,r,l,t,f,i-1),recursiveArc(0,0,l,o,t,f,i-1),recursiveArc(0,0,r,l,f,n,i-1),recursiveArc(0,0,l,o,f,n,i-1)),pop()}function drawArc(e,a,r,o,t,n){let i,d=params.Colors.concat(),s=R.random_dec()>.5,c=R.random_choice([4,2,1,.5,1/4,1/8,1/16,1/32,1/64])*params.Constant/5,l=R.random_choice([4,2,1,.5,1/4,1/8,1/16,1/32,1/64])*params.Constant/5;l=c,d=arrayShuffle(d),push(),translate(e,a),rotate(90*R.random_dec());let f=radians(r);switch("Safari"==browserName&&(f+=PI/2),params.Gradient){case"Conic":i=drawingContext.createConicGradient(f,0,0),s=!0;break;case"Solid":case"Mix":i=s?drawingContext.createConicGradient(f,0,0):drawingContext.createRadialGradient(0,0,max(0,t/2),0,0,max(0,2*n));break;case"Radial":i=drawingContext.createRadialGradient(0,0,max(0,t/2),0,0,max(0,3*n/2)),s=!1}if(s&&"Solid"!=params.Gradient?(i.addColorStop(0,d[0]),i.addColorStop(1,d[0]),i.addColorStop(constrain(1*(o-r)/360/2,0,1),d[2]),i.addColorStop(constrain(1*(o-r)/360,0,1),d[1])):"Solid"!=params.Gradient&&(i.addColorStop(0,d[0]),i.addColorStop(.5,d[2]),i.addColorStop(1,d[1])),"Solid"==params.Gradient){let e,a=0;for(let r=0;r<o/360;r+=e){let t=decPairs[a++%decPairs.length];e=o/(decPairs[t%decPairs.length]%5+2)/360,i.addColorStop(r,d[t%d.length]),0==r&&i.addColorStop(1,d[t%d.length]),i.addColorStop(constrain(r+e-.001,0,1),d[3*t++%d.length])}}o-r<3||t<5*M||n-t<30*M?(noFill(),noStroke()):(stroke(0,0,20),strokeWeight(.5*M),fill(0,0,90)),drawingContext.fillStyle=i,push();let h=R.random_dec()>.5?-1:1;"On"==params.Shear&&(shearX(h*R.random_dec()*9),shearY(h*R.random_dec()*9));let m=1,u=[];switch(beginShape(),params.Shape){case"Straight":m=R.random_dec()<.9?.334*abs(o-r):1;break;case"Curve":m=1;break;case"Mix":m=R.random_dec()>.5?1:.5*abs(o-r)}for(let e=r;e<=o;e+=m){u.push(m);let a=n*sin(.5*e)*map(sin(map(e,r,o,0,360*c)),-1,1,.5,1);vertex(cos(e)*a,sin(e)*a)}u.reverse();for(let e=o;e>=r;e-=m){m=u[0],u.splice(0,1);let a=t*sin(.5*e)*map(sin(map(e,r,o,0,7*l)),-1,1,.5,1);vertex(cos(e)*a,sin(e)*a)}endShape(CLOSE),pop(),pop()}function arrayShuffle(e){for(let a=e.length-1;0<a;a--){let r=Math.floor(R.random_dec()*(a+1)),o=e[a];e[a]=e[r],e[r]=o}return e}function drawSpot(e,a,r,o){push(),translate(e,a),drawingContext.shadowBlur=0,drawingContext.shadowColor=null;for(let e=0;e<o;e++){let e=360*R.random_dec(),a=randomGaussian(.1,.5)*r/2;blob(cos(e)*a,sin(e)*a,1+randomGaussian(.1,R.random_dec())*a/25)}blendMode(BLEND),pop()}function blob(e,a,r){push(),translate(e,a),noStroke(),decPairs[8]%2==0?(blendMode(ADD),fill(0,0,100,4)):(blendMode(MULTIPLY),fill(0,0,0,2)),curveTightness(-2*R.random_dec()-1),beginShape();let o=[];for(let e=0;e<3;e++){let a=120*e,t=r/2+R.random_dec()*r,n={x:cos(a)*t,y:sin(a)*t};curveVertex(n.x,n.y),o.push(n)}for(let e of o)curveVertex(e.x,e.y);endShape(),pop()}function drawPostEffect(){imageMode(CENTER);let e=getTexture(width,height);push(),"Chrome"==browserName?drawingContext.globalAlpha=.6:("Safari"==browserName||"Mozilla Firefox"==browserName)&&(drawingContext.globalAlpha=.05),image(e,0,0,width,height),e.remove(),drawingContext.globalAlpha=1,pop(),grainBuffer.clear(),grainBuffer.reset(),grainBuffer.push(),grainBuffer.shader(grainShader),grainShader.setUniform("source",mainCanvas),grainShader.setUniform("noiseAmount",map(M,.1,2,.001,.1)),grainBuffer.rectMode(CENTER),grainBuffer.noStroke(),grainBuffer.rect(0,0,width,height),grainBuffer.pop(),push(),image(grainBuffer,0,0,width,height),grainBuffer.remove(),resetShader(),pop()}function getTexture(e,a){const r=createGraphics(e,a);r.randomSeed(seed),r.colorMode(HSB,360,100,100,100),r.angleMode(DEGREES),r.strokeWeight(1*M);for(let o=0;o<e;o+=20*e/defaultWidth)for(let t=0;t<a;t+=20*a/defaultHeight){let n=R.random_num(75,105),i=max(e,a)/2;r.stroke(0,0,100,3*R.random_dec()),r.line(o+r.cos(n)*i,t+r.sin(n)*i,o+r.cos(n+180)*i,t+r.sin(n+180)*i)}return r}