-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgravity.min.js
More file actions
2 lines (2 loc) · 18.1 KB
/
Copy pathgravity.min.js
File metadata and controls
2 lines (2 loc) · 18.1 KB
1
2
(function(){function E(a,b){return a.push.apply(a,b),a}function F(a,b,c,d){for(var e=a.length,f=c+(d?1:-1);d?f--:++f<e;)if(b(a[f],f,a))return f;return-1}function G(b){return function(c){return null==c?a:c[b]}}function H(b){return function(c){return null==b?a:b[c]}}function I(a,b,c,d,e){return e(a,function(a,e,f){c=d?(d=!1,a):b(c,a,e,f)}),c}function J(a,b){return ta(b,function(b){return a[b]})}function L(a,b){return function(c){return a(b(c))}}function X(a){return a instanceof Z?a:new Z(a)}function Z(a,b){this.__wrapped__=a,this.__actions__=[],this.__chain__=!!b}function $(b,c,d,e){return b===a||ub(b,N[d])&&!O.call(e,d)?c:b}function _(b,c,d){var e=b[c];O.call(b,c)&&ub(e,d)&&(d!==a||c in b)||aa(b,c,d)}function aa(a,b,c){a[b]=c}function ba(b,d,e){if("function"!=typeof b)throw new TypeError(c);return setTimeout(function(){b.apply(a,e)},d)}function da(a,b){var c=!0;return ca(a,function(a,d,e){return c=!!b(a,d,e)}),c}function ea(b,c,d){for(var e=-1,f=b.length;++e<f;){var g=b[e],h=c(g);if(null!=h&&(i===a?h===h&&!0:d(h,i)))var i=h,j=g}return j}function fa(a,b){var c=[];return ca(a,function(a,d,e){b(a,d,e)&&c.push(a)}),c}function ga(a,b,c,d,e){var f=-1,g=a.length;for(c||(c=Na),e||(e=[]);++f<g;){var h=a[f];b>0&&c(h)?b>1?ga(h,b-1,c,d,e):E(e,h):d||(e[e.length]=h)}return e}function ia(a,b){return a&&ha(a,b,Xb)}function ja(a,b){return fa(b,function(b){return Db(a[b])})}function ka(a){return Pa(a)}function la(a,b){return a>b}function na(a){return Gb(a)&&ka(a)==n}function oa(a,b,c,d,e){return a===b||(null==a||null==b||!Fb(a)&&!Gb(b)?a!==a&&b!==b:pa(a,b,c,d,oa,e))}function pa(a,b,c,e,f,g){var h=wb(a),i=wb(b),l=k,m=k;h||(l=ka(a),l=l==j?s:l),i||(m=ka(b),m=m==j?s:m);var n=l==s,o=m==s,p=l==m;g||(g=[]);var q=gb(g,function(b){return b[0]==a}),r=gb(g,function(a){return a[0]==b});if(q&&r)return q[1]==b;if(g.push([a,b]),g.push([b,a]),p&&!n){var t=h?Ja(a,b,c,e,f,g):Ka(a,b,l,c,e,f,g);return g.pop(),t}if(!(c&d)){var u=n&&O.call(a,"__wrapped__"),v=o&&O.call(b,"__wrapped__");if(u||v){var w=u?a.value():a,x=v?b.value():b,t=f(w,x,c,e,g);return g.pop(),t}}if(!p)return!1;var t=La(a,b,c,e,f,g);return g.pop(),t}function qa(a){return Gb(a)&&ka(a)==u}function ra(a){return"function"==typeof a?a:null==a?bc:("object"==typeof a?ua:G)(a)}function sa(a,b){return a<b}function ta(a,b){var c=-1,d=xb(a)?Array(a.length):[];return ca(a,function(a,e,f){d[++c]=b(a,e,f)}),d}function ua(a){var b=V(a);return function(c){var f=b.length;if(null==c)return!f;for(c=Object(c);f--;){var g=b[f];if(!(g in c&&oa(a[g],c[g],d|e)))return!1}return!0}}function va(a,b){return a=Object(a),jb(b,function(b,c){return c in a&&(b[c]=a[c]),b},{})}function wa(a,b){return Ra(Qa(a,b,bc),a+"")}function xa(a,b,c){var d=-1,e=a.length;b<0&&(b=-b>e?0:e+b),c=c>e?e:c,c<0&&(c+=e),e=b>c?0:c-b>>>0,b>>>=0;for(var f=Array(e);++d<e;)f[d]=a[d+b];return f}function ya(a){return xa(a,0,a.length)}function za(a,b){var c;return ca(a,function(a,d,e){return c=b(a,d,e),!c}),!!c}function Aa(a,b){var c=a;return jb(b,function(a,b){return b.func.apply(b.thisArg,E([a],b.args))},c)}function Ba(b,c){if(b!==c){var d=b!==a,e=null===b,f=b===b,g=!1,h=c!==a,i=null===c,j=c===c,k=!1;if(!i&&!k&&!g&&b>c||g&&h&&j&&!i&&!k||e&&h&&j||!d&&j||!f)return 1;if(!e&&!g&&!k&&b<c||k&&d&&f&&!e&&!g||i&&d&&f||!h&&f||!j)return-1}return 0}function Ca(b,c,d,e){var f=!d;d||(d={});for(var g=-1,h=c.length;++g<h;){var i=c[g],j=e?e(d[i],b[i],i,d,b):a;j===a&&(j=b[i]),f?aa(d,i,j):_(d,i,j)}return d}function Da(b){return wa(function(c,d){var e=-1,f=d.length,g=f>1?d[f-1]:a;for(g=b.length>3&&"function"==typeof g?(f--,g):a,c=Object(c);++e<f;){var h=d[e];h&&b(c,h,e,g)}return c})}function Ea(a,b){return function(c,d){if(null==c)return c;if(!xb(c))return a(c,d);for(var e=c.length,f=b?e:-1,g=Object(c);(b?f--:++f<e)&&d(g[f],f,g)!==!1;);return c}}function Fa(a){return function(b,c,d){for(var e=-1,f=Object(b),g=d(b),h=g.length;h--;){var i=g[a?h:++e];if(c(f[i],i,f)===!1)break}return b}}function Ga(a){return function(){var b=arguments,c=Y(a.prototype),d=a.apply(c,b);return Fb(d)?d:c}}function Ha(b){return function(c,d,e){var f=Object(c);if(!xb(c)){var g=ra(d,3);c=Xb(c),d=function(a){return g(f[a],a,f)}}var h=b(c,d,e);return h>-1?f[g?c[h]:h]:a}}function Ia(a,b,d,e){function i(){for(var b=-1,c=arguments.length,f=-1,j=e.length,k=Array(j+c),l=this&&this!==B&&this instanceof i?h:a;++f<j;)k[f]=e[f];for(;c--;)k[f++]=arguments[++b];return l.apply(g?d:this,k)}if("function"!=typeof a)throw new TypeError(c);var g=b&f,h=Ga(a);return i}function Ja(b,c,f,g,h,i){var j=f&d,k=b.length,l=c.length;if(k!=l&&!(j&&l>k))return!1;for(var m=-1,n=!0,o=f&e?[]:a;++m<k;){var r,p=b[m],q=c[m];if(r!==a){if(r)continue;n=!1;break}if(o){if(!za(c,function(a,b){if(!Ya(o,b)&&(p===a||h(p,a,f,g,i)))return o.push(b)})){n=!1;break}}else if(p!==q&&!h(p,q,f,g,i)){n=!1;break}}return n}function Ka(a,b,c,d,e,f,g){switch(c){case m:case n:case r:return ub(+a,+b);case o:return a.name==b.name&&a.message==b.message;case u:case v:return a==b+""}return!1}function La(b,c,e,f,g,h){var i=e&d,j=Xb(b),k=j.length,l=Xb(c),m=l.length;if(k!=m&&!i)return!1;for(var n=k;n--;){var o=j[n];if(!(i?o in c:O.call(c,o)))return!1}for(var p=!0,q=i;++n<k;){o=j[n];var t,r=b[o],s=c[o];if(!(t===a?r===s||g(r,s,e,f,h):t)){p=!1;break}q||(q="constructor"==o)}if(p&&!q){var u=b.constructor,v=c.constructor;u!=v&&"constructor"in b&&"constructor"in c&&!("function"==typeof u&&u instanceof u&&"function"==typeof v&&v instanceof v)&&(p=!1)}return p}function Ma(b){return Ra(Qa(b,a,Va),b+"")}function Na(a){return wb(a)||vb(a)}function Oa(a){var b=[];if(null!=a)for(var c in Object(a))b.push(c);return b}function Pa(a){return Q.call(a)}function Qa(b,c,d){return c=W(c===a?b.length-1:c,0),function(){for(var a=arguments,e=-1,f=W(a.length-c,0),g=Array(f);++e<f;)g[e]=a[c+e];e=-1;for(var h=Array(c+1);++e<c;)h[e]=a[e];return h[c]=d(g),b.apply(this,h)}}function Sa(a){return fa(a,Boolean)}function Ta(){var a=arguments.length;if(!a)return[];for(var b=Array(a-1),c=arguments[0],d=a;d--;)b[d-1]=arguments[d];return E(wb(c)?ya(c):[c],ga(b,1))}function Ua(a,b,c){var d=null==a?0:a.length;if(!d)return-1;var e=null==c?0:Ob(c);return e<0&&(e=W(d+e,0)),F(a,ra(b,3),e)}function Va(a){var b=null==a?0:a.length;return b?ga(a,1):[]}function Wa(a){var b=null==a?0:a.length;return b?ga(a,h):[]}function Xa(b){return b&&b.length?b[0]:a}function Ya(a,b,c){var d=null==a?0:a.length;c="number"==typeof c?c<0?W(d+c,0):c:0;for(var e=(c||0)-1,f=b===b;++e<d;){var g=a[e];if(f?g===b:g!==g)return e}return-1}function Za(b){var c=null==b?0:b.length;return c?b[c-1]:a}function $a(b,c,d){var e=null==b?0:b.length;return c=null==c?0:+c,d=d===a?e:+d,e?xa(b,c,d):[]}function _a(a){var b=X(a);return b.__chain__=!0,b}function ab(a,b){return b(a),a}function bb(a,b){return b(a)}function db(){return Aa(this.__wrapped__,this.__actions__)}function eb(b,c,d){return c=d?a:c,da(b,ra(c))}function fb(a,b){return fa(a,ra(b))}function hb(a,b){return ca(a,ra(b))}function ib(a,b){return ta(a,ra(b))}function jb(a,b,c){return I(a,ra(b),c,arguments.length<3,ca)}function kb(a){return null==a?0:(a=xb(a)?a:V(a),a.length)}function lb(b,c,d){return c=d?a:c,za(b,ra(c))}function mb(a,b){var c=0;return b=ra(b),ta(ta(a,function(a,d,e){return{value:a,index:c++,criteria:b(a,d,e)}}).sort(function(a,b){return Ba(a.criteria,b.criteria)||a.index-b.index}),G("value"))}function nb(b,d){var e;if("function"!=typeof d)throw new TypeError(c);return b=Ob(b),function(){return--b>0&&(e=d.apply(this,arguments)),b<=1&&(d=a),e}}function rb(a){if("function"!=typeof a)throw new TypeError(c);return function(){var b=arguments;return!a.apply(this,b)}}function sb(a){return nb(2,a)}function tb(a){return Fb(a)?wb(a)?ya(a):Ca(a,V(a)):a}function ub(a,b){return a===b||a!==a&&b!==b}function xb(a){return null!=a&&Eb(a.length)&&!Db(a)}function yb(a){return a===!0||a===!1||Gb(a)&&ka(a)==m}function Ab(a){return xb(a)&&(wb(a)||Lb(a)||Db(a.splice)||vb(a))?!a.length:!V(a).length}function Bb(a,b){return oa(a,b)}function Cb(a){return"number"==typeof a&&U(a)}function Db(a){if(!Fb(a))return!1;var b=ka(a);return b==p||b==q||b==l||b==t}function Eb(a){return"number"==typeof a&&a>-1&&a%1==0&&a<=i}function Fb(a){var b=typeof a;return null!=a&&("object"==b||"function"==b)}function Gb(a){return null!=a&&"object"==typeof a}function Hb(a){return Jb(a)&&a!=+a}function Ib(a){return null===a}function Jb(a){return"number"==typeof a||Gb(a)&&ka(a)==r}function Lb(a){return"string"==typeof a||!wb(a)&&Gb(a)&&ka(a)==v}function Mb(b){return b===a}function Nb(a){return xb(a)?a.length?ya(a):[]:_b(a)}function Qb(a){return"string"==typeof a?a:null==a?"":a+""}function Ub(a,b){var c=Y(a);return null==b?c:Rb(c,b)}function Wb(a,b){return null!=a&&O.call(a,b)}function $b(b,c,d){var e=null==b?a:b[c];return e===a&&(e=d),Db(e)?e.call(b):e}function _b(a){return null==a?[]:J(a,Xb(a))}function ac(a){return a=Qb(a),a&&x.test(a)?a.replace(w,K):a}function bc(a){return a}function dc(a){return ua(Rb({},a))}function ec(a,b,c){var d=Xb(b),e=ja(b,d);null!=c||Fb(b)&&(e.length||!d.length)||(c=b,b=a,a=this,e=ja(b,Xb(b)));var f=!(Fb(c)&&"chain"in c&&!c.chain),g=Db(a);return ca(e,function(c){var d=b[c];a[c]=d,g&&(a.prototype[c]=function(){var b=this.__chain__;if(f||b){var c=a(this.__wrapped__),e=c.__actions__=ya(this.__actions__);return e.push({func:d,args:arguments,thisArg:a}),c.__chain__=b,c}return d.apply(a,E([this.value()],arguments))})}),a}function fc(){return B._===this&&(B._=R),this}function gc(){}function hc(a){var b=++P;return Qb(a)+b}function ic(b){return b&&b.length?ea(b,bc,la):a}function jc(b){return b&&b.length?ea(b,bc,sa):a}var a,b="4.17.2",c="Expected a function",d=1,e=2,f=1,g=32,h=1/0,i=9007199254740991,j="[object Arguments]",k="[object Array]",l="[object AsyncFunction]",m="[object Boolean]",n="[object Date]",o="[object Error]",p="[object Function]",q="[object GeneratorFunction]",r="[object Number]",s="[object Object]",t="[object Proxy]",u="[object RegExp]",v="[object String]",w=/[&<>"']/g,x=RegExp(w.source),y={"&":"&","<":"<",">":">",'"':""","'":"'"},z="object"==typeof global&&global&&global.Object===Object&&global,A="object"==typeof self&&self&&self.Object===Object&&self,B=z||A||Function("return this")(),C="object"==typeof exports&&exports&&!exports.nodeType&&exports,D=C&&"object"==typeof module&&module&&!module.nodeType&&module,K=H(y),M=Array.prototype,N=Object.prototype,O=N.hasOwnProperty,P=0,Q=N.toString,R=B._,S=Object.create,T=N.propertyIsEnumerable,U=B.isFinite,V=L(Object.keys,Object),W=Math.max,Y=function(){function b(){}return function(c){if(!Fb(c))return{};if(S)return S(c);b.prototype=c;var d=new b;return b.prototype=a,d}}();Z.prototype=Y(X.prototype),Z.prototype.constructor=Z;var ca=Ea(ia),ha=Fa(),ma=gc,Ra=bc,gb=Ha(Ua),ob=wa(function(a,b,c){return Ia(a,f|g,b,c)}),pb=wa(function(a,b){return ba(a,1,b)}),qb=wa(function(a,b,c){return ba(a,Pb(b)||0,c)}),vb=ma(function(){return arguments}())?ma:function(a){return Gb(a)&&O.call(a,"callee")&&!T.call(a,"callee")},wb=Array.isArray,zb=na,Kb=qa,Ob=Number,Pb=Number,Rb=Da(function(a,b){Ca(b,V(b),a)}),Sb=Da(function(a,b){Ca(b,Oa(b),a)}),Tb=Da(function(a,b,c,d){Ca(b,Yb(b),a,d)}),Vb=wa(function(b){return b.push(a,$),Tb.apply(a,b)}),Xb=V,Yb=Oa,Zb=Ma(function(a,b){return null==a?{}:va(a,b)}),cc=ra;X.assignIn=Sb,X.before=nb,X.bind=ob,X.chain=_a,X.compact=Sa,X.concat=Ta,X.create=Ub,X.defaults=Vb,X.defer=pb,X.delay=qb,X.filter=fb,X.flatten=Va,X.flattenDeep=Wa,X.iteratee=cc,X.keys=Xb,X.map=ib,X.matches=dc,X.mixin=ec,X.negate=rb,X.once=sb,X.pick=Zb,X.slice=$a,X.sortBy=mb,X.tap=ab,X.thru=bb,X.toArray=Nb,X.values=_b,X.extend=Sb,ec(X,X),X.clone=tb,X.escape=ac,X.every=eb,X.find=gb,X.forEach=hb,X.has=Wb,X.head=Xa,X.identity=bc,X.indexOf=Ya,X.isArguments=vb,X.isArray=wb,X.isBoolean=yb,X.isDate=zb,X.isEmpty=Ab,X.isEqual=Bb,X.isFinite=Cb,X.isFunction=Db,X.isNaN=Hb,X.isNull=Ib,X.isNumber=Jb,X.isObject=Fb,X.isRegExp=Kb,X.isString=Lb,X.isUndefined=Mb,X.last=Za,X.max=ic,X.min=jc,X.noConflict=fc,X.noop=gc,X.reduce=jb,X.result=$b,X.size=kb,X.some=lb,X.uniqueId=hc,X.each=hb,X.first=Xa,ec(X,function(){var a={};return ia(X,function(b,c){O.call(X.prototype,c)||(a[c]=b)}),a}(),{chain:!1}),X.VERSION=b,ca(["pop","join","replace","reverse","split","push","shift","sort","splice","unshift"],function(a){var b=(/^(?:replace|split)$/.test(a)?String.prototype:M)[a],c=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",d=/^(?:pop|join|replace|shift)$/.test(a);X.prototype[a]=function(){var a=arguments;if(d&&!this.__chain__){var e=this.value();return b.apply(wb(e)?e:[],a)}return this[c](function(c){return b.apply(wb(c)?c:[],a)})}}),X.prototype.toJSON=X.prototype.valueOf=X.prototype.value=db,"function"==typeof define&&"object"==typeof define.amd&&define.amd?(B._=X,define(function(){return X})):D?((D.exports=X)._=X,C._=X):B._=X}).call(this);
function calculateRadius(a){return Math.sqrt(a/Math.PI*2)};function updateObjects(a){forces=calculateForces(a);for(var b=0;b<a.length;b++){var c=multipleVectorOperation(forces[b],add),d=scalarOperation1(a[b].mass,c,div),e=(Date.now()-a[b].lastTimeUpdated)/SLOW_DOWN,f=initialiseArray(a[b].velocity.length,e),g=vectorOperation(f,d,mult);a[b].velocity=vectorOperation(a[b].velocity,g,add);var h=vectorOperation(f,a[b].velocity,mult);a[b].coord=vectorOperation(h,a[b].coord,add),a[b].lastTimeUpdated=Date.now()}return checkForCollisions(a),checkForOutSideCanvas(a),forces}function checkForCollisions(a){for(var b=0;b<a.length;b++)for(var c=0;c<a.length;c++)if(!(b>=c)&&detectCollision(a[b],a[c])){a[b].mass+=a[c].mass,a[b].radius=calculateRadius(a[b].mass),relativeVelocityJ=1*a[c].mass/a[b].mass,relativeVelocityI=1-relativeVelocityJ,a[b].velocity=scalarOperation(relativeVelocityI,a[b].velocity,mult);var d=scalarOperation(relativeVelocityJ,a[c].velocity,mult);a[b].velocity=vectorOperation(a[b].velocity,d,add),a.splice(c,1),c--}}function detectCollision(a,b){var c=vectorOperation(a.coord,b.coord,sub),d=getDistance(c);return d<a.radius+b.radius}function checkForOutSideCanvas(a){for(var b=0;b<a.length;b++)a[b].coord[0]>MAX_COORD[0]||a[b].coord[0]<0?a[b].velocity=[-a[b].velocity[0],a[b].velocity[1]]:(a[b].coord[1]>MAX_COORD[1]||a[b].coord[1]<0)&&(a[b].velocity=[a[b].velocity[0],-a[b].velocity[1]])}function calculateForces(a){for(var b=initialise2DArray(a.length),c=0;c<a.length;c++)for(var d=0;d<a.length;d++)if(c==d)b[c][d]=initialiseArray(a[c].force.length,0);else{if(void 0!==b[c][d])continue;b[d][c]=calculateForce(a[c],a[d]),b[c][d]=_.map(b[d][c],function(a){return-a})}return b}function calculateForce(a,b){var c=vectorOperation(a.coord,b.coord,sub),d=getDistance(c),e=0===d?initialiseArray(c.length,0):getNormalisedVector(c,d),f=0===d?0:G*a.mass*b.mass/(d*d);return _.map(e,function(a){return a*f})}function getDistance(a){for(var b=0,c=0;c<a.length;c++)b+=a[c]*a[c];return Math.sqrt(b)}function getNormalisedVector(a,b){return _.map(a,function(a){return 1*a/b})}function multipleVectorOperation(a,b){return _.reduce(a,function(a,c){return vectorOperation(a,c,b)})}function vectorOperation(a,b,c){for(var d=Math.min(a.length,b.length),e=[],f=0;f<d;f++)e.push(c(1*a[f],b[f]));return e}function scalarOperation(a,b,c){return _.map(b,function(b){return c(a,b)})}function scalarOperation1(a,b,c){return _.map(b,function(b){return c(b,a)})}function initialiseArray(a,b){return _.map(new Array(a),function(a){return b})}function initialise2DArray(a){for(var b=[],c=0;c<a;c++)b.push(new Array(a));return b}function sub(a,b){return a-b}function add(a,b){return a+b}function mult(a,b){return a*b}function div(a,b){return 0===b?0:a/b};function init(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"canvas",b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[window.innerWidth-20,.8*window.innerHeight],c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100,d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.2,e=arguments.length>4&&void 0!==arguments[4]?arguments[4]:25,f=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];canvas=document.getElementById(a),context=canvas.getContext("2d"),MAX_COORD=b,OBJECTS=c,G=d,SLOW_DOWN=e,MAX_DIST=getDistance([MAX_COORD[0]/6,MAX_COORD[1]/6]),setCanvasSize(canvas);var g=generateObjects(c);f&&(window.onresize=function(){cancelAnimationFrame(requestId),MAX_COORD=[window.innerWidth-20,.8*window.innerHeight],setCanvasSize(canvas);var a=generateObjects(OBJECTS);draw(a)}),draw(g)}function setCanvasSize(a){a.setAttribute("width",MAX_COORD[0]),a.setAttribute("height",MAX_COORD[1])}function draw(a){if(a.length<20){cancelAnimationFrame(requestId);var b=generateObjects(OBJECTS);return void draw(b)}context.clearRect(0,0,MAX_COORD[0],MAX_COORD[1]);var c=updateObjects(a);checkForOutOfBounds(a),drawCircles(a),drawLines(a,c),requestId=requestAnimationFrame(function(){return draw(a)})}function drawCircles(a){a.forEach(function(a){context.beginPath(),context.arc(a.coord[0],a.coord[1],a.radius,0,2*Math.PI,!1),a.mass>20?context.fillStyle="rgb(255, 255, 255)":context.fillStyle="rgba(255, 255, 255,"+OPACITY+")",context.fill(),context.lineWidth=0})}function drawLines(a,b){getMagnitudeForce(a,b);for(var c=0;c<a.length;c++)for(var d=0;d<a.length;d++)if(!(c>=d||distanceTooGreat(a[c],a[d]))){if(b[c][d]>=MAX)context.strokeStyle="rgba(255, 255, 255,"+OPACITY+")";else{var e=b[c][d]/MAX*OPACITY;context.strokeStyle="rgba(255, 255, 255,"+e+")"}context.beginPath(),context.lineWidth=1,context.moveTo(a[c].coord[0],a[c].coord[1]),context.lineTo(a[d].coord[0],a[d].coord[1]),context.stroke()}}function checkForOutOfBounds(a){for(var b=0;b<a.length;b++)(a[b].coord[0]<-TOLERANCE||a[b].coord[0]>MAX_COORD[0]+TOLERANCE||a[b].coord[1]<-TOLERANCE||a[b].coord[1]>MAX_COORD[1]+TOLERANCE)&&(a.splice(b,1),b--)}function distanceTooGreat(a,b){var c=vectorOperation(a.coord,b.coord,sub),d=getDistance(c);return d>MAX_DIST}function getMagnitudeForce(a,b){for(var c=0;c<a.length;c++)for(var d=0;d<a.length;d++)c>d||(b[c][d]=getDistance(b[c][d]),b[d][c]=b[c][d])}function generateObjects(a){for(var b=[],c=0;c<a;c++){var d=1*getRandomInt(1,10);b.push({mass:d,radius:calculateRadius(d),velocity:[1*getRandomInt(0,1),1*getRandomInt(0,1)],force:[0,0],coord:[getRandomInt(0,MAX_COORD[0]),getRandomInt(0,MAX_COORD[1])],lastTimeUpdated:Date.now()})}return b}function getRandomInt(a,b){return Math.floor(Math.random()*(b-a+1))+a}var OPACITY=.7,MAX=.01,TOLERANCE=10,MAX_DIST,MAX_COORD,OBJECTS,G,SLOW_DOWN,canvas,context,requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,cancelAnimationFrame=window.cancelAnimationFrame||window.mozCancelAnimationFrame,requestId;