예제 #1
0
        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);
        }