private NodeVisual calcForces(Node n, List <Node> nodes, double time = 1) { NodeVisual targetNV = visualNodes[n.deviceId]; foreach (Node nn in nodes) { if (nn.deviceId == n.deviceId) { continue; } NodeVisual nv = visualNodes[nn.deviceId]; Vector v = new Vector(targetNV.position, nv.position); double distance = v.length; double interaction = calcInteraction(n, nn); double minDistance = MIN_DISTANCE; v.length = getPullRate(distance, interaction, minDistance, ELASTICITY) * time; v.endPoint = v.getEndPoint(); drawVector(v); //drawVector(targetNV.moveVector); targetNV.addForce(v); if (n.trustedNodes.ContainsKey(nn.deviceId)) { if (!connections[n.deviceId].Contains(nn.deviceId)) { drawConnect(targetNV, nv); connections[n.deviceId].Add(nn.deviceId); connections[nn.deviceId].Add(n.deviceId); } } } return(targetNV); }