private static float CalculateForce(IEnumerable <GravityObject> objects, Vector2f point) { var totalForce = new Vector2f(); foreach (var go in objects) { var distSquared = point.DistanceSquared(go.GlobalCenterOfMass); distSquared /= 10; var offsetVec = go.GlobalCenterOfMass - point; var force = GravityObject.GravitationalConstant * (Mass * go.Mass) * offsetVec.Normalize() / distSquared; totalForce += force; } return(totalForce.Magnitude()); }
public Actor GetClosestActor(Vector2f origin, ActorCategory category) { const float SEARCH_RADIUS_SQ = 50.0f * 50.0f; Actor closestActor = null; float closestSqDist = Single.MaxValue; // Find scenes near the actor for (int i = 0; i < this.Scenes.Length; i++) { Scene scene = this.Scenes[i]; if (AABB.DistanceSquared(scene.BoundingBox, origin) <= SEARCH_RADIUS_SQ) { // Check distance for all actors in the this scene for (int j = 0; j < scene.Actors.Count; j++) { Actor actor = scene.Actors[j]; if (actor.AcdID == this.Me.AcdID || actor.Category == ActorCategory.ServerProp) { continue; } if (category == ActorCategory.Invalid || category == actor.Category) { float sqDist = Vector2f.DistanceSquared(origin, actor.Position); if (sqDist < closestSqDist) { closestActor = actor; closestSqDist = sqDist; } } } } } return(closestActor); }
public bool Contains(Vector2f point) { return(center.DistanceSquared(point) < radius * radius); }