/* ------------------ */ /* index-rings-tick.js */ /* ------------------ */ function tickVoroForce(alpha) { // ticking force hpct = parseInt(svgElement.style("width"), 10) / 100 vpct = parseInt(svgElement.style("height"), 10) / 100 mpct = hpct + vpct / 2 var dir = 0 var k = 1 var p = 0.01 var c = 50 var q = 1 if (moving == 0) { for (var i = 0; i < seeds.length; i++) { if (seeds[i].fx === undefined) seeds[i].vxTmp = seeds[i].vx, seeds[i].fx = seeds[i].x, seeds[i].fxTmp = 'set' if (seeds[i].fy === undefined) seeds[i].vyTmp = seeds[i].vy, seeds[i].fy = seeds[i].y, seeds[i].fyTmp = 'set' } } if (moving == 1) { for (var i = 0; i < seeds.length; i++) { if (seeds[i].fxTmp === 'set') seeds[i].vx = seeds[i].vxTmp, seeds[i].fx = undefined, seeds[i].fxTmp = undefined if (seeds[i].fyTmp === 'set') seeds[i].vy = seeds[i].vyTmp, seeds[i].fy = undefined, seeds[i].fyTmp = undefined } tickingSeeds(alpha) } } function tickingSeeds(alpha) { // tick when force is active for (i = 0; i < seeds.length; i++) { var randNormal = d3.randomNormal(1.3, 2) var randNormal2 = d3.randomNormal(0.5, 1.8) seeds[i].vx = randNormal() * (Math.random() - 0.5) seeds[i].vy += randNormal2() } seedsArea = {x0: nodes[0].x, y0: 0, x1:nodes[1].x, y1: 100} extent = [[seedsArea.x0 + 1, seedsArea.y0 + 1], [seedsArea.x1 + 1 , seedsArea.y1 - 1]] // abs voro = d3.voronoi().extent(extent) dia = voro(seeds.map(function(d) {return [d.x, d.y]})) // pass an array of coordinates [[,], [,]] polygons = dia.triangles() redrawVoroDiagam() // REDRAW DIAGRAM } function contentionForce(alpha, items, area) { // contentionForce for (var i = 0, n = items.length, node, k = alpha * 0.1; i < n; ++i) { var item = items[i] if (item.vx > 0 && item.x >= area.x1) item.vx = -item.vx if (item.vx< 0 && item.x <= area.x0) item.vx = -item.vx if (item.vy > 0 && item.y >= area.y1) item.vy = -item.vy if (item.vy < 0 && item.y <= area.y0) item.vy = -item.vy if (Math.abs(item.vx) < 0.05) item.vx *= 2 if (Math.abs(item.vy) < 0.05) item.vy *= 2 if (Math.abs(item.vx) > 0.5) item.vx /= 2 if (Math.abs(item.vy) > 0.5) item.vy /= 2 } }