public bool IsColliding(Planet planet1, Planet planet2, out Vector2 distanceVector) { distanceVector = Measurements.GetDistanceVector(planet1, planet2); float distance = distanceVector.Length(); Vector2 coveredDistance = planet2.DirectionNextFrame - planet1.DirectionNextFrame; float skalar = Vector2.Dot(coveredDistance, distanceVector); float movementDistance = skalar / distance; float totalDistance = distance + movementDistance; return(planet1.Radius + planet2.Radius >= totalDistance); }
public void CalculateGravity(Planet planet1, Planet planet2, GameTime gameTime) { Vector2 distanceVector = Measurements.GetDistanceVector(planet1, planet2); float distanceSqared = distanceVector.LengthSquared(); if (distanceSqared == 0) return; float acceleration = GravityConstantKilometerTonns * GameGlobals.SimulationSpeedMuliplicator / distanceSqared * (float)gameTime.ElapsedGameTime.TotalSeconds; distanceVector.Normalize(); distanceVector *= acceleration; planet1.Direction += distanceVector * planet2.Mass; planet2.Direction -= distanceVector * planet1.Mass; }