Beispiel #1
0
        private Vector2f AttractionForce(Node target)
        {
            Vector2f atractionAcceleration = new Vector2f(0, 0);

            foreach (Node item in target.Neighbours)
            {
                float    distance  = (float)Vector2fLibrary.Dist(item.Shape.Position, target.Shape.Position);
                Vector2f direction = Vector2fLibrary.Normalize(item.Shape.Position - target.Shape.Position);

                atractionAcceleration += direction * (ConnectionForceConst * (distance - ConnectionDefaultLength));
            }

            return(atractionAcceleration);
        }
Beispiel #2
0
        private Vector2f RepulsionForce(Node target)
        {
            Vector2f repulsionAcceleration = new Vector2f(0, 0);

            foreach (Node item in Nodes)
            {
                if (item != target)
                {
                    double   sqdistance     = Vector2fLibrary.SqDist(target.Shape.Position, item.Shape.Position);
                    Vector2f direction      = Vector2fLibrary.Normalize(target.Shape.Position - item.Shape.Position);
                    double   force          = RepulsionConst * item.Mass * target.Mass / sqdistance;
                    Vector2f localRepulsion = direction * (float)force;

                    repulsionAcceleration += localRepulsion;
                }
            }

            return(repulsionAcceleration);
        }