memoscan
← all memos

Memo 0xd8dcd900…96b8d9 on Ethereum

<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,shrink-to-fit=0,user-scalable=no,minimum-scale=1,maximum-scale=1"><head> <title>Dendrites</title> <script language="javascript" type="text/javascript" src="https://cdn.jsdelivr.net/npm/p5@1.3.1/lib/p5.js"></script> <style>body{background: #000; width: 100vw; height: 100vh; display: flex; justify-content: center; align-items: center; flex-direction: row; margin: 0}canvas{margin: auto; display: block; box-shadow: 0 2px 12px -2px rgba(0, 0, 0, .15)}</style></head><body> <script>const hash = "{{hash}}"; let canvas; const DEFAULT_SIZE=1600; let WIDTH=window.innerWidth, HEIGHT=window.innerHeight; const EXPORT_SIZE=1600; let DIM=Math.min(WIDTH, HEIGHT), M=DIM / DEFAULT_SIZE; const borderPercentage=.04; let scl, cols, rows, fr, ff, mxMag, rHs, swSclFrHMin, swSclFrHMx, strWCh, currentframeCount, anLn, bgcl, clr1, clr2, clr3, clr4, rndChNo, rndHsStr, llmp, llrp, dMd, shapeSpeed, bgCpl, cplt, pourPalette, mchPoP, paMPo, particleModePourParticles, invP, darkPaletteShade, paletteMetadata, bgc=[{name: "White", cls: [[42, 26, 89]]},{name: "Dark", cls: [[0, 0, 0], [220, 57, 7]]},{name: "Grey", cls: [[0, 0, 89], [0, 0, 29]]}], newPalettes=[{name: "Rooster", cls: [[192, 100, 35], [0, 96, 53], [36, 99, 54], [47, 100, 50]], okBgd: 1, lerp: 0, pColMd: 0, invOK: 0},{name: "Rooster", cls: [[192, 100, 35], [0, 96, 53], [212, 89, 14], [47, 100, 50]], okBgd: 2, lerp: 0, pColMd: 0, invOK: 0},{name: "Bacteria", cls: [[69, 98, 36], [128, 96, 18], [190, 74, 59], [175, 49, 48]], okBgd: 3, lerp: 0, pColMd: 0, invOK: 0},{name: "Spring", cls: [[69, 98, 36], [128, 96, 18], [356, 97, 74], [16, 100, 74]], okBgd: 3, lerp: 0, pColMd: 0, invOK: 0},{name: "Mars", cls: [[71, 22, 90], [221, 36, 38], [5, 67, 50], [51, 100, 56]], okBgd: 3, lerp: 0, pColMd: 0, invOK: 1},{name: "White walker", cls: [[188, 23, 36], [186, 12, 69], [30, 16, 78], [214, 31, 30]], okBgd: 2, lerp: 0, pColMd: 0, invOK: 1},{name: "Metal", cls: [[34, 63, 71], [32, 100, 71], [213, 21, 58], [132, 6, 69]], okBgd: 2, lerp: 0, pColMd: 0, invOK: 1},{name: "Purple Haze", cls: [[39, 100, 50], [47, 100, 50], [324, 63, 30], [324, 56, 52]], okBgd: 3, lerp: 1, pColMd: 1, invOK: 1},{name: "Bruise", cls: [[324, 63, 30], [0, 0, 10], [39, 100, 50], [47, 100, 50]], okBgd: 1, lerp: 0, pColMd: 0, invOK: 0},{name: "Coral", cls: [[29, 100, 75], [326, 100, 75], [0, 96, 48], [0, 100, 51]], okBgd: 3, lerp: 1, pColMd: 1, invOK: 1},{name: "Subzero Ice", cls: [[192, 100, 35], [212, 89, 14], [0, 0, 98], [0, 0, 81]], okBgd: 1, lerp: 1, pColMd: 0, invOK: 0},{name: "Compost", cls: [[79, 69, 52], [84, 61, 32], [80, 18, 46], [180, 6, 14]], okBgd: 1, lerp: 0, pColMd: 0, invOK: 1},{name: "Subzero Rose", cls: [[192, 100, 35], [212, 89, 14], [0, 0, 98], [0, 96, 48]], okBgd: 1, lerp: 0, pColMd: 1, invOK: 0},{name: "Subzero Red", cls: [[192, 100, 35], [212, 89, 14], [0, 96, 53], [0, 96, 48]], okBgd: 3, lerp: 0, pColMd: 1, invOK: 0},{name: "Glacier", cls: [[190, 74, 59], [189, 75, 75], [190, 76, 82], [190, 77, 88]], okBgd: 2, lerp: 0, pColMd: 1, invOK: 1},{name: "Aqua", cls: [[224, 97, 40], [175, 49, 48], [198, 82, 43], [190, 64, 69]], okBgd: 3, lerp: 0, pColMd: 0, invOK: 1},{name: "Ice Cream", cls: [[1, 100, 81], [340, 100, 62], [176, 49, 48], [160, 39, 64]], okBgd: 3, lerp: 1, pColMd: 1, invOK: 0},{name: "Synth Wave", cls: [[333, 93, 56], [276, 91, 38], [258, 86, 34], [194, 85, 62]], okBgd: 3, lerp: 1, pColMd: 1, invOK: 1},{name: "Sprout", cls: [[20, 94, 63], [42, 93, 64], [94, 38, 59], [162, 43, 46]], okBgd: 3, lerp: 1, pColMd: 1, invOK: 1},{name: "Lion", cls: [[49, 100, 50], [36, 99, 54], [15, 73, 44], [26, 81, 47]], okBgd: 1, lerp: 0, pColMd: 1, invOK: 1},{name: "Mango", cls: [[29, 100, 75], [36, 100, 54], [326, 100, 75], [347, 87, 57]], okBgd: 1, lerp: 1, pColMd: 1, invOK: 1},{name: "Fire", cls: [[29, 100, 75], [0, 96, 48], [30, 100, 45], [49, 100, 50]], okBgd: 1, lerp: 1, pColMd: 1, invOK: 1}], maAr=[], mpa=[], numberOfMachines=1, inc=.1, zoff=0, prt=[], prtVCf=2.3, zoomMode=0, mxVmp=0, lOkfp=!1, parAlLo=.9, parAlHi=.98; function setup(){canvasWidth=DIM, canvasHeight=DIM, canvas=createCanvas(canvasWidth, canvasHeight), colorMode(HSL, 360, 100, 100, 1); getURLParams(); rHs=new Random(hash), seed=round(1e9 * rHs.random_dec()), noiseSeed(seed), randomSeed(seed), dMd=weighted_random([0, 1, 3], [10, 1, 6]), window.METADATA={}, createNewDrawing()}function createNewDrawing(){colorrndChNo=1==dMd ? weighted_random([1, 2], [5, 5]) : weighted_random([1, 2, 5, 6], [30, 30, 1, 1]), invP=weighted_random([0, 1], [5, 5]), setclsBasedOnrndChNo(colorrndChNo), background(bgcl), pntDpnr=rHs.random_int(0, 2), llmp=rHs.random_int(2, 4), llrp=rHs.random_int(5, 10); let t=0==(strWCh=weighted_random([0, 1], [3, 1])) ? [.35, .052075] : [.25, .042075]; swSclFrHMx=t[0], swSclFrHMin=t[1], 1==lOkfp ? (paMPo=rHs.random_int(0, 2), particleModePourParticles=rHs.random_int(0, 1)) : (paMPo=rHs.random_int(1, 2), particleModePourParticles=rHs.random_int(1, 1)), 0==cplt.pColMd && 1==paMPo && (paMPo=2), createGradient(); for (let t=0; t < numberOfMachines; t +=1)maAr[t]=new Machine, maAr[t].createSemiRandomMachine(rHs), maAr[t].reset(); for (let t=0; t < maAr.length; t +=1)cm=maAr[t], calculateShapePoints(cm); mxMag=rHs.random_int(0, 90), scl=rHs.random_int(10, 14), scaleColsAndRowsToResolutionAndCreateFlowFieldArray(), scalecmPointsToFitWindowAndSaveScaledResult(), parsempaInToFlowfieldArray(), scaleFlowFieldArrayInToUnitVectors(), populateMetadata(), addParticlesToFlowfield(maAr, 2), anLn=1==dMd ? 240 : 120}function populateMetadata(){paletteMetadata=5==colorrndChNo ? "Black and Grey" : 6==colorrndChNo ? "Black" : pourPalette.name, 0==paMPo && (window.METADATA["Shape Shades"]=llmp), 0==particleModePourParticles && (window.METADATA["Pour Shades"]=llrp), 1==colorrndChNo && 1==darkPaletteShade && (colorrndChNo=0), window.METADATA["Drawing Mode"]=["Normal", "Double", "", "Zoom"][dMd], window.METADATA.Background=["Dark Blue", "Black", "Light", "", "", "Light", "Light"][colorrndChNo], window.METADATA.Shape=shapeSpeed + 1, window.METADATA.Pour=["Square", "Circle", "Line"][pntDpnr], window.METADATA["Particle thickness"]=["Normal", "Thin"][strWCh], window.METADATA["Grid Size"]=["Very Low", "Low", "Medium", "High", "Very High"][4 * round((scl - 10) / 4)], window.METADATA["Force Scale"]=["Very Low", "Low", "Medium", "High", "Very High"][4 * round(mxMag / 90)], window.METADATA.Palette=paletteMetadata, window.METADATA["Particle Mode shape"]=["Multi shade", "Even Odd", "50-50"][paMPo], window.METADATA["Particle Mode pour"]=["Multi shade", "50-50"][particleModePourParticles], window.METADATA["Palette Mode"]=["Inverted", "Normal"][invP]}function createGradient(){let t, e=drawingContext.createRadialGradient(width / 2, height / 2, 0, width / 2, height / 2, 4 * width / 3); t=0==colorrndChNo || 1==colorrndChNo ? [round(hue(bgcl)), round(saturation(bgcl)), round(lightness(bgcl) + 10)] : [round(hue(bgcl)), round(saturation(bgcl)), round(lightness(bgcl) - 10)], e.addColorStop(0, color(bgcl)), e.addColorStop(1, color(t)), drawingContext.fillStyle=e, noStroke(), rect(0, 0, width, height)}function calculateShapePoints(t){let e=[]; for (let r=0; r < 360 * t.mTrn; r +=t.crStps){let s=2 * r * PI / 360; t.setRotation(s); let o=t.getPenPositionOnCanvas(); 0 !=isNaN(o.x) && 0 !=isNaN(o.y) || e.push(o)}t.mpa=e}function scaleColsAndRowsToResolutionAndCreateFlowFieldArray(){cols=floor(DEFAULT_SIZE / scl), rows=floor(DEFAULT_SIZE / scl), ff=new Array(cols * rows)}function scalecmPointsToFitWindowAndSaveScaledResult(){for (let t=0; t < maAr.length; t +=1)cm=maAr[t], scaleMachinePointsToFitCanvas(cm), applyScaling(cm.scFmpa), movePointsFromAroundOrigoToCenterOfCanvas(cm, DEFAULT_SIZE / 2, DEFAULT_SIZE / 2)}function scaleMachinePointsToFitCanvas(t){let e; for (let e=0; e < t.mpa.length; e +=1)abs(t.mpa[e].x) > mxVmp && (mxVmp=abs(t.mpa[e].x)), abs(t.mpa[e].y) > mxVmp && (mxVmp=abs(t.mpa[e].y)); e=(DEFAULT_SIZE - DEFAULT_SIZE * borderPercentage) / mxVmp / 2, t.scFmpa=e}function applyScaling(t){t > .9 && 3==dMd && cm.mpa.length > 23e3 ? (zoomMode=1, t=2, pSpc=1) : 3==dMd && (dMd=0); for (let e=0; e < cm.mpa.length; e +=1){let r=createVector(cm.mpa[e].x, cm.mpa[e].y); r.setMag(r.mag() * t), cm.mpa[e].x=r.x, cm.mpa[e].y=r.y}}function movePointsFromAroundOrigoToCenterOfCanvas(t, e, r){for (let s=0; s < t.mpa.length; s +=1)t.mpa[s].x=t.mpa[s].x + e, t.mpa[s].y=t.mpa[s].y + r}function parsempaInToFlowfieldArray(){for (let t=0; t < maAr.length; t +=1){cm=maAr[t]; let e=DEFAULT_SIZE / cols, r=DEFAULT_SIZE / rows; for (let t=0; t < cm.mpa.length - 1; t +=1){let s, o, l=createVector(cm.mpa[t + 1].x - cm.mpa[t].x, cm.mpa[t + 1].y - cm.mpa[t].y); if (l.mag() < 100){for (let l=0; l < cols; l +=1){cm.mpa[t].x >=l * e && cm.mpa[t].x <=(l + 1) * e && (s=l); for (let e=0; e < rows; e +=1)cm.mpa[t].y > e * r && cm.mpa[t].y < (e + 1) * r && (o=e)}let n=s + o * cols, a=ff[n]; null==a ? a=l : a.add(l), ff[n]=a}}}}function addParticlesToFlowfield(t, e){for (let r=0; r < numberOfMachines; r +=1)cm=t[r], cm.mpa.length < 14e3 ? createPraticlesAtMachinePoints(cm, llmp, 1) : createPraticlesAtMachinePoints(cm, llmp, e), createRandomPraticles(1e4, llrp)}function createPraticlesAtMachinePoints(t, e, r){if (0==paMPo){let s=0; for (let o=0; o < maAr.length; o +=1){let o; for (let l=0; l < t.mpa.length - r; l +=r){let r=createVector(t.mpa[l].x * M, t.mpa[l].y * M), n=t.mpa.length / e; for (let t=0; t < e; t +=1)l >=n * t && l <=n * (t + 1) && (lerpScale=t, o=lerpColor(color(clr1), color(clr2), 1 / lerpScale)); let a=new Particle; s +=1, a.prC=o, a.prC.setAlpha(rHs.random_between(parAlLo, parAlHi)), a.pos=r, a.prevPos=a.pos.copy(), prt.push(a)}}}else if (1==paMPo){let e=0; for (let s=0; s < maAr.length; s +=1){let s; for (let o=0; o < t.mpa.length - r; o +=r){let l=createVector(t.mpa[o].x * M, t.mpa[o].y * M); ooe=o / r % 2, s=1==ooe ? color(clr1) : color(clr2); let n=new Particle; e +=1, n.prC=s, n.prC.setAlpha(rHs.random_between(parAlLo, parAlHi)), n.pos=l, n.prevPos=n.pos.copy(), prt.push(n)}}}else if (2==paMPo){let e=0; for (let s=0; s < maAr.length; s +=1){let s; for (let o=0; o < t.mpa.length - r; o +=r){let r=createVector(t.mpa[o].x * M, t.mpa[o].y * M); s=o < t.mpa.length / 2 ? color(clr1) : color(clr2); let l=new Particle; e +=1, l.prC=s, l.pos=r, l.prevPos=l.pos.copy(), l.prC.setAlpha(rHs.random_between(parAlLo, parAlHi)), prt.push(l)}}}}function createRandomPraticles(t, e){let r; if (0==particleModePourParticles){let s; for (let o=0; o < t; o +=1){let l=t / e; for (let t=0; t < e; t +=1)o >=l * t && o <=l * (t + 1) && (s=t, r=lerpColor(color(clr3), color(clr4), 1 / s)); let n=new Particle; n.prC=color(r), n.prC.setAlpha(rHs.random_between(parAlLo, parAlHi)), 0==pntDpnr ? n.pos=createVector(rHs.random_between(DIM / 8 * 2, DIM / 8 * 6), rHs.random_between(DIM / 8 * 2, DIM / 8 * 6)) : 1==pntDpnr ? n.pos=getRandomVectorWithinCircle(DIM / 5) : 2==pntDpnr && (n.pos=createVector(rHs.random_between(DIM / 10 * 4.9, DIM / 10 * 5.1), rHs.random_between(DIM / 8 * 1, DIM / 8 * 7))), n.prevPos=n.pos.copy(), prt.push(n)}}if (1==particleModePourParticles) for (let e=0; e < t; e +=1){r=e < t / 2 ? color(clr3) : color(clr4); let s=new Particle; s.prC=color(r), s.prC.setAlpha(rHs.random_between(parAlLo, parAlHi)), 0==pntDpnr ? s.pos=createVector(rHs.random_between(DIM / 8 * 2, DIM / 8 * 6), rHs.random_between(DIM / 8 * 2, DIM / 8 * 6)) : 1==pntDpnr ? s.pos=getRandomVectorWithinCircle(DIM / 5) : 2==pntDpnr && (s.pos=createVector(rHs.random_between(DIM / 10 * 4.9, DIM / 10 * 5.1), rHs.random_between(DIM / 8 * 1, DIM / 8 * 7))), s.prevPos=s.pos.copy(), prt.push(s)}}function getRandomVectorWithinCircle(t){let e=rHs.random_between(0, 4 * PI), r=rHs.random_between(0, t), s=DIM / 2 + cos(e) * r, o=DIM / 2 + sin(e) * r; return createVector(s, o)}function draw(){if (1==dMd){1==frameCount && (window.METADATA["Palette Double"]=paletteMetadata); for (let t=0; t < prt.length; t++)prt[t].follow(ff), prt[t].update(), prt[t].show(); frameCount < anLn && (currentframeCount=frameCount), frameCount==floor(anLn / 2) && createNewDrawing(), frameCount==anLn && (prt.splice(0, prt.length), window.top && window.top.postMessage("genart:done", "*"), noLoop())}if (0==dMd || 3==dMd){for (let t=0; t < prt.length; t++)prt[t].follow(ff), prt[t].update(), prt[t].show(); frameCount==anLn && (prt.splice(0, prt.length), window.top && window.top.postMessage("genart:done", "*"), noLoop())}}function scaleFlowFieldArrayInToUnitVectors(){let t=[]; for (let e=0; e < ff.length; e +=1){let r=ff[e]; null !=r && t.push(r.mag())}for (let t=0; t < ff.length; t +=1){let e=ff[t]; if (null !=e){let r=e.mag() / mxMag; e.setMag(r), ff[t]=e}}}function setclsBasedOnrndChNo(t){if (1==t){for (bgCpl=bgc[1], darkPaletteShade=rHs.random_int(0, bgCpl.cls.length - 1), bgcl=bgCpl.cls[darkPaletteShade], cplt=newPalettes[rHs.random_int(0, newPalettes.length - 1)]; 1==cplt.okBgd;)cplt=newPalettes[rHs.random_int(0, newPalettes.length - 1)]; lOkfp=1==(pourPalette=cplt).lerp, 1==invP && 1==pourPalette.invOK ? (clr1=cplt.cls[2], clr2=cplt.cls[3], clr3=cplt.cls[0], clr4=cplt.cls[1]) : (invP=0, clr1=cplt.cls[0], clr2=cplt.cls[1], clr3=cplt.cls[2], clr4=cplt.cls[3])}else if (2==t){for (bgCpl=bgc[0], bgcl=bgCpl.cls[rHs.random_int(0, bgCpl.cls.length - 1)], cplt=newPalettes[rHs.random_int(0, newPalettes.length - 1)]; 2==cplt.okBgd;)cplt=newPalettes[rHs.random_int(0, newPalettes.length - 1)]; lOkfp=1==(pourPalette=cplt).lerp, 1==invP && 1==pourPalette.invOK ? (clr1=cplt.cls[2], clr2=cplt.cls[3], clr3=cplt.cls[0], clr4=cplt.cls[1]) : (invP=0, clr1=cplt.cls[0], clr2=cplt.cls[1], clr3=cplt.cls[2], clr4=cplt.cls[3])}else 5==t ? (bgCpl=bgc[0], bgcl=bgCpl.cls[rHs.random_int(0, bgCpl.cls.length - 1)], cplt=bgc[1], pourPalette=cplt, clr1=cplt.cls[0], clr2=cplt.cls[0], cplt=bgc[2], mchPoP=cplt, clr3=cplt.cls[0], clr4=cplt.cls[1]) : 6==t && (bgCpl=bgc[0], bgcl=bgCpl.cls[rHs.random_int(0, bgCpl.cls.length - 1)], cplt=bgc[1], pourPalette=cplt, mchPoP=cplt, clr1=cplt.cls[0], clr2=cplt.cls[0], clr3=cplt.cls[0], clr4=cplt.cls[0])}function returnPlusOrMinus1(){return result=rHs.random_int(0, 1), 0==result ? -1 : 1}function random_hash(){let t="0123456789abcdef", e="0x"; for (let r=64; r > 0; --r)e +=t[Math.floor(Math.random() * t.length)]; return print("random hash result: " + e), rndHsStr=e, e}function weighted_random(t, e){let r; for (r=0; r < e.length; r++)e[r] +=e[r - 1] || 0; let s=rHs.random_between(0, 1) * e[e.length - 1]; for (r=0; r < e.length && !(e[r] > s); r++); return t[r]}class Random{constructor(t){this.seed=parseInt(t.slice(0, 16), 16)}random_dec(){return this.seed ^=this.seed << 13, this.seed ^=this.seed >> 17, this.seed ^=this.seed << 5, (this.seed < 0 ? 1 + ~this.seed : this.seed) % 1e3 / 1e3}random_between(t, e){return t + (e - t) * this.random_dec()}random_int(t, e){return Math.floor(this.random_between(t, e + 1))}random_choice(t){return t[Math.floor(this.random_between(0, .99 * t.length))]}}class Machine{constructor(t, e, r, s, o, l, n, a, i, c, h, p, d, m, g, w, M, u, A, P, C, f, v, b, H, D, _, y, T, S, B, x, I, F){this.cpX=t, this.cpY=e, this.cSpd=r, this.tAs=s, this.tAd=o, this.tAr=l, this.tAsa=n, this.tBs=a, this.tBd=i, this.tBr=c, this.tBsa=h, this.tABd=p, this.tCs=d, this.tCr=m, this.tCsa=g, this.rAbl=w, this.rAel=M, this.rBl=u, this.mTrn=A, this.scale=P, this.caGr=C, this.tAgr=f, this.tBgr=v, this.tCgr=b, this.mCvs=H, this.towerA=D, this.towerB=_, this.towerC=y, this.rodA=T, this.rodB=S, this.spPos=B, this.crStps=x, this.mpa=I, this.scFmpa=F}reset(){this.mCvs=new Rotor(new PointDrama(this.cpX, this.cpY), 0, this.cSpd, this.caGr, 0, 0); let t=this.getThetaFromLegs(this.tAd, this.tBd, this.tABd), e=new PointDrama(this.mCvs.location.x, this.mCvs.location.y + this.tAd); e.Rotate(this.mCvs.location, -t / 2); let r=new PointDrama(this.mCvs.location.x, this.mCvs.location.y + this.tBd); r.Rotate(this.mCvs.location, t / 2), this.towerA=new Rotor(e, this.tAr, this.tAs, this.tAgr, radians(this.tAsa), 0), this.towerB=new Rotor(r, this.tBr, this.tBs, this.tBgr, radians(this.tBsa), 0), this.towerC=new Rotor(this.towerB, this.tCr, this.tCs, this.tCgr, radians(this.tCsa), 0)}setRotation(t){this.mCvs.theta=t * this.mCvs.speed * this.mCvs.gearing, this.towerA.theta=t * this.towerA.speed * this.towerA.gearing, this.towerB.theta=t * this.towerB.speed * this.towerB.gearing, this.towerC.theta=t * this.towerC.speed * this.towerC.gearing, this.moveRods()}moveRods(){let t=new Line(this.towerA.getConnectingPoint(), this.towerB.getConnectingPoint()), e=t.getLength(), r=this.getThetaFromLegs(e, this.rAbl, this.rBl); this.rodA=t, this.rodA.rotate(r), this.rodA.setLength(this.rAbl); new Line(this.towerB.getConnectingPoint(), this.rodA.end); this.rodA.setLength(this.rAbl + this.rAel)}getThetaFromLegs(t, e, r){return acos((pow(t, 2) + pow(e, 2) - pow(r, 2)) / (2 * t * e))}getPenPositionOnCanvas(){let t=new PointDrama(this.rodA.end.x, this.rodA.end.y); return t.Rotate(this.mCvs.location, this.mCvs.theta), t}increasetAsPerStep(t){this.tAs=this.tAs + t}setStartPointForMachine(t, e){this.cpX=t, this.cpY=e}createSemiRandomMachine(t){this.rHs=t; let e=[.04135640605, .5, .012953634173, 1, 1, .019507268346, 1.20589873, 1.20589873, .019653634173, .058970902519, .019653634173, .019653634173, .009853634173, .009753634173, .009753634173, .009753634173, .009491634173, 2.45414276, .03, .01437304603, .005423790956, 1.627137287, .003254274574, 1.20570873, .002983085026, .02711895478]; this.spPos=int(this.rHs.random_between(0, e.length)), shapeSpeed=this.spPos, this.cSpd=e[this.spPos] * returnPlusOrMinus1(), this.tAs=[.02757976195, 1, 4.81783686, 2, 2, 4.81783686, 3.613377645, 3.613377645, 9.63567372, 4.81783686, 4.81783686, 4.81783686, 4.81783686, 4.81783686, 4.81783686, 4.81783686, 4.81783686, .0481783686, 2, 2.384829246, 2.426985318, 3.252039881, 4.336053174, 3.613377645, 5.058728703, .05420066468][this.spPos] * returnPlusOrMinus1(), this.tBs=[4.827575302, 9.15, 4.83729111, 5.0053, 2.9964, 4.83729111, .9022586356, 3.609034539, 4.78836111, 4.78836111, 9.57672222, 4.78836111, 4.78829111, 4.81629111, 4.82429111, 4.83729111, 4.84929111, 4.812046052, 4.06, .002406023026, 2.446925417, 3.266176258, 5.78047032, -3.609034539, .04330841447, 2.414444107][this.spPos] * returnPlusOrMinus1(), this.cpX=0, this.cpY=0, this.tAd=this.rHs.random_between(325, 450), this.tAr=this.rHs.random_between(150, 400), this.tAsa=radians(this.rHs.random_between(0, 360)), this.tBd=this.rHs.random_between(325, 500), this.tBr=this.rHs.random_between(45, 200), this.tBsa=radians(this.rHs.random_between(0, 360)), this.tABd=this.rHs.random_between(200, 400), this.rAbl=this.rHs.random_between(270, 400), this.rAel=this.rHs.random_between(112, 150), this.rBl=this.rHs.random_between(225, 300), this.mTrn=this.rHs.random_between(150, 250), this.crStps=this.rHs.random_between(1, 2.5), this.mpa=[], this.caGr=1, this.tAgr=1, this.tBgr=1, this.tCgr=1}}class Particle{constructor(){this.rHs=rHs, this.pos=createVector(0, 0), this.vel=createVector(1 * M, 1 * M), this.acc=createVector(0, 0), this.maxspeed=4 * M, this.h=0, this.prC=color("#0095cf"), this.particleFiction=rHs.random_between(.05, .08), this.prevPos=this.pos.copy()}update(){this.vel.add(this.acc), this.vel.limit(4 * M), this.pos.add(this.vel), this.acc.mult(0); let t=this.vel.mag() - this.particleFiction; this.vel.setMag(t)}follow(t){var e=t[floor(this.pos.x / (scl * M)) + floor(this.pos.y / (scl * M)) * cols]; this.applyForce(e)}applyForce(t){this.acc.add(t)}show(){this.h=this.h + 1, this.h > 255 && (this.h=0); let t=color(this.prC), e=map(this.vel.mag(), 2 * M, 4 * M, swSclFrHMin * M, swSclFrHMx * M); strokeWeight(e), this.vel.mag() > prtVCf * M && (stroke(t), line(this.pos.x, this.pos.y, this.prevPos.x, this.prevPos.y)), this.updatePrev()}updatePrev(){this.prevPos.x=this.pos.x, this.prevPos.y=this.pos.y}edges(){this.pos.x > width && (this.pos.x=0, this.updatePrev()), this.pos.x < 0 && (this.pos.x=width, this.updatePrev()), this.pos.y > height && (this.pos.y=0, this.updatePrev()), this.pos.y < 0 && (this.pos.y=height, this.updatePrev())}}class PointDrama{constructor(t, e){this.x=t, this.y=e}Rotate(t, e){let r=cos(e) * (this.x - t.x) - sin(e) * (this.y - t.y) + t.x, s=sin(e) * (this.x - t.x) + cos(e) * (this.y - t.y) + t.y; this.x=r, this.y=s}Move(t){this.x +=t.x, this.y +=t.y}GetDistanceFrom(t){return sqrt(pow(this.x - t.x, 2) + pow(this.y - t.y, 2))}}class Rotor{constructor(t, e, r, s, o, l){this.location=t, this.radius=e, this.speed=r, this.gearing=s, this.startTheta=o, this.theta=l}getCenter(){return this.location}getThetaSum(){return this.startTheta + theta}getConnectingPoint(){let t=this.startTheta + this.theta; return new PointDrama(this.location.x + cos(t) * this.radius, this.location.y + sin(t) * this.radius)}}class Line{constructor(t, e){this.start=t, this.end=e}draw(){line(this.start.x, this.start.y, this.end.x, this.end.y)}getLength(){return sqrt(pow(this.end.x - this.start.x, 2) + pow(this.end.y - this.start.y, 2))}setLength(t){let e=t / this.getLength(), r=new PointDrama(this.start.x + (this.end.x - this.start.x) * e, this.start.y + (this.end.y - this.start.y) * e); this.end=r}rotate(t){this.end.Rotate(this.start, t)}}</script></body></html>P5JS