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); }
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); }