if (window.$) { $.fn.int = function(){ return parseInt($(this).val(),10) } $.fn.float = function(){ return parseFloat($(this).val()) } $.fn.string = function(){ return trim($(this).val()) } $.fn.enable = function() { return $(this).attr("disabled",null) } $.fn.disable = function() { return $(this).attr("disabled","disabled") } } function noop(){} function trim(s){ return s.replace(/^\s+/,"").replace(/\s+$/,"") } var E = Math.E var PI = Math.PI var PHI = (1+Math.sqrt(5))/2 var TWO_PI = PI*2 var LN10 = Math.LN10 function clamp(n,a,b){ return n= 0.5 ? -1 : 1 } function choice(a){ return a[randint(a.length)] } function deg(n){ return n*180/PI } function rad(n){ return n*PI/180 } function xor(a,b){ a=!!a; b=!!b; return (a||b) && !(a&&b) } function mod(n,m){ return n-(m * floor(n/m)) } function dist(x0,y0,x1,y1){ return sqrt(pow(x1-x0,2)+pow(y1-y0,2)) } function angle(x0,y0,x1,y1){ return atan2(y1-y0,x1-x0) } function avg(m,n,a){ return (m*(a-1)+n)/a } function quantize(a,b){ return round(a/b)*b } function quantize_down(a,b){ return floor(a/b)*b } function quantize_up(a,b){ return ceil(a/b)*b } function pixel(x,y){ return 4*(mod(y,actual_h)*actual_w+mod(x,actual_w)) } function rgbpixel(d,x,y){ var p = pixel(~~x,~~y) r = d[p] g = d[p+1] b = d[p+2] a = d[p+3] } function fit(d,x,y){ rgbpixel(d,x*actual_w/w,y*actual_h/h) } function step(a, b){ return (b >= a) + 0 // ^^ bool -> int } function julestep (a,b,n) { return clamp(norm(n,a,b), 0.0, 1.0); } // hermite curve apparently function smoothstep(min,max,n){ var t = clamp((n - min) / (max - min), 0.0, 1.0); return t * t * (3.0 - 2.0 * t) } function shuffle(a){ for (var i = a.length; i > 0; i--){ var r = randint(i) var swap = a[i-1] a[i-1] = a[r] a[r] = swap } return a } function reverse(a){ var reversed = [] for (var i = 0, _len = a.length-1; i <= _len; i++){ reversed[i] = a[_len-i] } return reversed } function deinterlace(a){ var odd = [], even = [] for (var i = 0, _len = a.length; i < _len; i++) { if (i % 2) even.push(a[i]) else odd.push(a[i]) } return [even, odd] } function weave(a){ var aa = deinterlace(a) var b = [] aa[0].forEach(function(el){ b.push(el) }) reverse(aa[1]).forEach(function(el){ b.push(el) }) return b } // easing functions function circular (t) { return Math.sqrt( 1 - ( --t * t ) ) } function quadratic (t) { return t * ( 2 - t ) } function back (t) { var b = 4; return ( t = t - 1 ) * t * ( ( b + 1 ) * t + b ) + 1; } function bounce (t) { if (t >= 1) return 1; if ( ( t /= 1 ) < ( 1 / 2.75 ) ) { return 7.5625 * t * t; } else if ( t < ( 2 / 2.75 ) ) { return 7.5625 * ( t -= ( 1.5 / 2.75 ) ) * t + 0.75; } else if ( t < ( 2.5 / 2.75 ) ) { return 7.5625 * ( t -= ( 2.25 / 2.75 ) ) * t + 0.9375; } else { return 7.5625 * ( t -= ( 2.625 / 2.75 ) ) * t + 0.984375; } } function elastic (t) { var f = 0.22, e = 0.4; if ( t === 0 ) { return 0; } if ( t == 1 ) { return 1; } return ( e * Math.pow( 2, - 10 * t ) * Math.sin( ( t - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 ); }