blobs
Version:
Random blob generation and animation
3 lines (2 loc) • 4.96 kB
JavaScript
var rand=function(n){var t,e,o,r,n=function(n){for(var t=2166136261,e=0;e<n.length;e++)t=Math.imul(t^n.charCodeAt(e),16777619);return function(){return(t=(t=(t=(t=(t+=t<<13)^t>>>7)+(t<<3))^t>>>17)+(t<<5))>>>0}}(n);return t=n(),e=n(),o=n(),r=n(),function(){var n=(t>>>=0)+(e>>>=0)|0;return t=e^e>>>9,e=(o>>>=0)+(o<<3)|0,o=(o=o<<21|o>>>11)+(n=n+(r=(r>>>=0)+1|0)|0)|0,(n>>>0)/4294967296}},__assign=function(){return(__assign=Object.assign||function(n){for(var t,e=1,o=arguments.length;e<o;e++)for(var r in t=arguments[e])Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n}).apply(this,arguments)},copyPoint=function(n){return{x:n.x,y:n.y,handleIn:__assign({},n.handleIn),handleOut:__assign({},n.handleOut)}},forPoints=function(e,o){function n(n){function t(n){return copyPoint(e[mod(n,e.length)])}o({curr:copyPoint(e[n]),index:n,sibling:t,prev:function(){return t(n-1)},next:function(){return t(n+1)}})}for(var t=0;t<e.length;t++)n(t)},mapPoints=function(n,t){var e=[];return forPoints(n,function(n){e.push(t(n))}),e},angleOf=function(n,t){var e=t.x-n.x,t=-t.y+n.y,n=Math.atan2(t,e);return n<0?Math.abs(n):2*Math.PI-n},expandHandle=function(n,t){return{x:n.x+t.length*Math.cos(t.angle),y:n.y+t.length*Math.sin(t.angle)}},smooth=function(n,r){return mapPoints(n,function(n){var t=n.curr,e=n.next,n=n.prev,o=angleOf(n(),e());return{x:t.x,y:t.y,handleIn:{angle:o+Math.PI,length:r*distance(t,n())},handleOut:{angle:o,length:r*distance(t,e())}}})},mod=function(n,t){return(n%t+t)%t},distance=function(n,t){return Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2))},smoothBlob=function(n){var t=2*Math.PI/n.length,t=4/3*Math.tan(t/4)/Math.sin(t/2)/2;return smooth(n,t)},genBlobygon=function(n,t){for(var e=2*Math.PI/n,o=[],r=0;r<n;r++){var a=t(r),c=Math.sin(r*e),i=Math.cos(r*e);o.push({x:.5+c*a,y:.5+i*a,handleIn:{angle:0,length:0},handleOut:{angle:0,length:0}})}return o},genBlob=function(n,t){return smoothBlob(genBlobygon(n,t))},genFromOptions=function(n,t){var e=t||rand(String(n.seed)),o=1/(1+n.randomness/10),t=genBlob(3+n.extraPoints,function(n){return(o+e(n)*(1-o))/2}),r=n.size;return mapPoints(t,function(n){n=n.curr;return n.x*=r,n.y*=r,n.handleIn.length*=r,n.handleOut.length*=r,n})},renderPath=function(n){var o="M".concat(n[0].x,",").concat(n[0].y);return forPoints(n,function(n){var t=n.curr,n=(0,n.next)(),t=expandHandle(t,t.handleOut),e=expandHandle(n,n.handleIn);o+="C".concat(t.x,",").concat(t.y,",").concat(e.x,",").concat(e.y,",").concat(n.x,",").concat(n.y)}),o},renderPath2D=function(n){var o=new Path2D;return n.length<1||(o.moveTo(n[0].x,n[0].y),forPoints(n,function(n){var t=n.curr,n=(0,n.next)(),t=expandHandle(t,t.handleOut),e=expandHandle(n,n.handleIn);o.bezierCurveTo(t.x,t.y,e.x,e.y,n.x,n.y)})),o},typeCheck=function(n,t,e){var o=typeof t;if("number"===o&&isNaN(t)&&(o="NaN"),!e.includes(o="object"===o&&null===t?"null":o))throw'"'.concat(n,'" should have type "').concat(e.join("|"),'" but was "').concat(o,'".')},checkBlobOptions=function(n){typeCheck("blobOptions",n,["object"]);var t=n.seed,e=n.extraPoints,o=n.randomness,n=n.size;if(typeCheck("blobOptions.seed",t,["string","number"]),typeCheck("blobOptions.extraPoints",e,["number"]),e<0)throw'blobOptions.extraPoints is invalid "'.concat(e,'".');if(typeCheck("blobOptions.randomness",o,["number"]),o<0)throw'blobOptions.randomness is invalid "'.concat(o,'".');if(typeCheck("blobOptions.size",n,["number"]),n<0)throw'blobOptions.size is invalid "'.concat(n,'".')},checkCanvasOptions=function(n){var t;typeCheck("canvasOptions",n,["object","undefined"]),n&&(t=n.offsetX,n=n.offsetY,typeCheck("canvasOptions.offsetX",t,["number","undefined"]),typeCheck("canvasOptions.offsetY",n,["number","undefined"]))},checkSvgOptions=function(n){var t,e;typeCheck("svgOptions",n,["object","undefined"]),n&&(t=n.fill,e=n.stroke,n=n.strokeWidth,typeCheck("svgOptions.fill",t,["string","undefined"]),typeCheck("svgOptions.stroke",e,["string","undefined"]),typeCheck("svgOptions.strokeWidth",n,["number","undefined"]))},canvasPath=function(n,t){void 0===t&&(t={});try{checkBlobOptions(n),checkCanvasOptions(t)}catch(n){throw"(blobs2): ".concat(n)}return renderPath2D(mapPoints(genFromOptions(n),function(n){n=n.curr;return n.x+=t.offsetX||0,n.y+=t.offsetY||0,n}))},svg=function(n,t){void 0===t&&(t={});try{checkBlobOptions(n),checkSvgOptions(t)}catch(n){throw"(blobs2): ".concat(n)}var e=svgPath(n),n=Math.floor(n.size),o=void 0===t.fill?"#ec576b":t.fill,r=void 0===t.stroke?"none":t.stroke,t=void 0===t.strokeWidth?0:t.strokeWidth;return'\n<svg width="'.concat(n,'" height="').concat(n,'" viewBox="0 0 ').concat(n," ").concat(n,'" xmlns="http://www.w3.org/2000/svg">\n <path stroke="').concat(r,'" stroke-width="').concat(t,'" fill="').concat(o,'" d="').concat(e,'"/>\n</svg>').trim()},svgPath=function(n){try{checkBlobOptions(n)}catch(n){throw"(blobs2): ".concat(n)}return renderPath(genFromOptions(n))};export{canvasPath,svg,svgPath};
//# sourceMappingURL=index.module.js.map