/* ------------------ */ /* index-lanes-tick.js */ /* ------------------ */ // ---------------- force field function tickRollsForce(alpha) { 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 < nodes.length; i++) { if (nodes[i].fx === undefined) nodes[i].vxTmp = nodes[i].vx, nodes[i].fx = nodes[i].x, nodes[i].fxTmp = 'set' if (nodes[i].fy === undefined) nodes[i].vyTmp = nodes[i].vy, nodes[i].fy = nodes[i].y, nodes[i].fyTmp = 'set' } } if (moving == 1) { for (var i = 0; i < nodes.length; i++) { if (nodes[i].fxTmp === 'set') nodes[i].vx = nodes[i].vxTmp, nodes[i].fx = undefined, nodes[i].fxTmp = undefined if (nodes[i].fyTmp === 'set') nodes[i].vy = nodes[i].vyTmp, nodes[i].fy = undefined, nodes[i].fyTmp = undefined } tickingNodes(alpha) } function tickingNodes(alpha) { // do when force is active for (var i = 0, n = nodes.length, node; i < n; ++i) { node = nodes[i]; if (node.color == 'red') { // red q = (node.x - c ) / c // -1 | 0 | +1 node.vx = node.vx - q * p node.x = node.x + node.vx node.fy = node.y } if (node.color == 'blue') { // blue q = (node.x - c ) / c // -1 | 0 | +1 node.vx = node.vx - q * p node.x = node.x + node.vx node.fy = node.y } if (node.color == 'green') { // green q = (node.x - c ) / c // -1 | 0 | +1 node.vx = node.vx - q * p node.x = node.x + node.vx node.fy = node.y } if (node.color == 'black') { // black node.fx = node.x node.fy = node.y } if (node.color == 'grey') { // grey node.fx = node.x node.fy = node.y } } } } function force3(alpha) { node = nodes[2]; if (node.vx > 0 && node.x >= 500) node.vx = -node.vx if (node.vx < 0 && node.x <= 100) node.vx = -node.vx }