// https://github.com/vasturiano/d3-force Version 1.0.6. Copyright 2017 Mike Bostock. !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-binarytree"),require("d3-quadtree"),require("d3-octree"),require("d3-collection"),require("d3-dispatch"),require("d3-timer")):"function"==typeof define&&define.amd?define(["exports","d3-binarytree","d3-quadtree","d3-octree","d3-collection","d3-dispatch","d3-timer"],t):t(n.d3=n.d3||{},n.d3,n.d3,n.d3,n.d3,n.d3,n.d3)}(this,function(n,t,e,r,i,u,o){"use strict";function f(n){return n.x+n.vx}function a(n){return n.y+n.vy}function c(n){return n.z+n.vz}function l(n){return n.index}function h(n,t){var e=n.get(t);if(!e)throw new Error("missing: "+t);return e}function v(n){return n.x}function y(n){return n.y}function d(n){return n.z}var s=function(n,t,e){function r(){var r,u,o=i.length,f=0,a=0,c=0;for(r=0;rg+A||v1&&(c>z+A||d2&&(l>p+A||ms.index){var b=g-w.x-w.vx,k=h>1?z-w.y-w.vy:0,j=h>2?p-w.z-w.vz:0,D=b*b+k*k+j*j;D1&&0===k&&(k=x(),D+=k*k),h>2&&0===j&&(j=x(),D+=j*j),D=(A-(D=Math.sqrt(D)))/D*y,s.vx+=(b*=D)*(A=(N*=N)/(q+N)),h>1&&(s.vy+=(k*=D)*A),h>2&&(s.vz+=(j*=D)*A),w.vx-=b*(A=1-A),h>1&&(w.vy-=k*A),h>2&&(w.vz-=j*A))}}for(var i,o,s,g,z,p,M,q,m=l.length,w=0;w1&&(z=s.y+s.vy),h>2&&(p=s.z+s.vz),o.visit(n)}function u(n){if(n.data)return n.r=v[n.data.index];for(var t=n.r=0;tn.r&&(n.r=n[t].r)}function o(){if(l){var t,e,r=l.length;for(v=new Array(r),t=0;t1&&(s=o.y+o.vy-u.y-u.vy||x()),v>2&&(g=o.z+o.vz-u.z-u.vz||x()),c=Math.sqrt(y*y+s*s+g*g),c=(c-a[h])/c*t*f[h],y*=c,s*=c,g*=c,o.vx-=y*(l=d[h]),v>1&&(o.vy-=s*l),v>2&&(o.vz-=g*l),u.vx+=y*(l=1-l),v>1&&(u.vy+=s*l),v>2&&(u.vz+=g*l)}function r(){if(c){var t,e,r=c.length,l=n.length,v=i.map(c,s);for(t=0,y=new Array(r);t1&&(null==e.fy?e.y+=e.vy*=s:(e.y=e.fy,e.vy=0)),l>2&&(null==e.fz?e.z+=e.vz*=s:(e.z=e.fz,e.vz=0))}function f(){for(var t,e=0,r=n.length;e1&&isNaN(t.y)||l>2&&isNaN(t.z)){var i=M*(l>2?Math.cbrt(e):l>1?Math.sqrt(e):e),u=e*q,o=e*m;t.x=i*(l>1?Math.cos(u):1),l>1&&(t.y=i*Math.sin(u)),l>2&&(t.z=i*Math.sin(o))}(isNaN(t.vx)||l>1&&isNaN(t.vy)||l>2&&isNaN(t.vz))&&(t.vx=0,l>1&&(t.vy=0),l>2&&(t.vz=0))}}function a(t){return t.initialize&&t.initialize(n,l),t}t=t||2;var c,l=Math.min(3,Math.max(1,Math.round(t))),h=1,v=.001,y=1-Math.pow(v,1/300),d=0,s=.6,g=i.map(),x=o.timer(e),z=u.dispatch("tick","end");return null==n&&(n=[]),f(),c={tick:r,restart:function(){return x.restart(e),c},stop:function(){return x.stop(),c},numDimensions:function(n){return arguments.length?(l=Math.min(3,Math.max(1,Math.round(n))),g.each(a),c):l},nodes:function(t){return arguments.length?(n=t,f(),g.each(a),c):n},alpha:function(n){return arguments.length?(h=+n,c):h},alphaMin:function(n){return arguments.length?(v=+n,c):v},alphaDecay:function(n){return arguments.length?(y=+n,c):+y},alphaTarget:function(n){return arguments.length?(d=+n,c):d},velocityDecay:function(n){return arguments.length?(s=1-n,c):1-s},force:function(n,t){return arguments.length>1?(null==t?g.remove(n):g.set(n,a(t)),c):g.get(n)},find:function(){var t,e,r,i,u,o,f=Array.prototype.slice.call(arguments),a=f.shift()||0,c=(l>1?f.shift():null)||0,h=(l>2?f.shift():null)||0,v=f.shift()||1/0,y=0,d=n.length;for(v*=v,y=0;y1?(z.on(n,t),c):z.on(n)}}},N=function(){function n(n){var i,h=f.length,s=(1===a?t.binarytree(f,v):2===a?e.quadtree(f,v,y):3===a?r.octree(f,v,y,d):null).visitAfter(u);for(l=n,i=0;i1&&(n.y=i/f),a>2&&(n.z=u/f)}else{t=n,t.x=t.data.x,a>1&&(t.y=t.data.y),a>2&&(t.z=t.data.z);do{f+=h[t.data.index]}while(t=t.next)}n.value=f}function o(n,t,e,r,i){if(!n.value)return!0;var u=[e,r,i][a-1],o=n.x-c.x,f=a>1?n.y-c.y:0,v=a>2?n.z-c.z:0,y=u-t,d=o*o+f*f+v*v;if(y*y/M1&&0===f&&(f=x(),d+=f*f),a>2&&0===v&&(v=x(),d+=v*v),d1&&(c.vy+=f*n.value*l/d),a>2&&(c.vz+=v*n.value*l/d)),!0;if(!(n.length||d>=p)){(n.data!==c||n.next)&&(0===o&&(o=x(),d+=o*o),a>1&&0===f&&(f=x(),d+=f*f),a>2&&0===v&&(v=x(),d+=v*v),d1&&(c.vy+=f*y),a>2&&(c.vz+=v*y))}while(n=n.next)}}var f,a,c,l,h,s=g(-30),z=1,p=1/0,M=.81;return n.initialize=function(n,t){f=n,a=t,i()},n.strength=function(t){return arguments.length?(s="function"==typeof t?t:g(+t),i(),n):s},n.distanceMin=function(t){return arguments.length?(z=t*t,n):Math.sqrt(z)},n.distanceMax=function(t){return arguments.length?(p=t*t,n):Math.sqrt(p)},n.theta=function(t){return arguments.length?(M=t*t,n):Math.sqrt(M)},n},A=function(n){function t(n){for(var t,e=0,o=r.length;e