public BasicBody(IDynamicBody dynamics, IElectroMag eMProps, BasicMaterial material, IEdgeIntersector collisionShape, IVolume shape, IOverlapable boundVolume) { Dynamics = dynamics; EMProps = eMProps; Material = material; CollisionShape = collisionShape; Shape = shape; BoundVolume = boundVolume; Dynamics.FrameFinished += (sender, e) => FrameFinished?.Invoke(sender, e); }
public TwoBodyUniverse(IDynamicBody bodyOne, IDynamicBody bodyTwo, double gravConstant) { BodyOne = bodyOne; BodyTwo = bodyTwo; GravitationalConstant = gravConstant; // initialzie constants TotalMass = BodyOne.Mass + BodyTwo.Mass; ReducedMass = (BodyOne.Mass * BodyTwo.Mass) / TotalMass; //SemiLatusRectum = TotalMomentum.MagSquared / (ReducedMass * GravitationalConstant * BodyOne.Mass * BodyTwo.Mass); //TotalMomentum = BodyOne.P + BodyTwo.P; //CenterOfMassVel = (1.0 / TotalMass) * TotalMomentum; TotalEnergy = TotalKineticEnergy + GravitationalPotential.Value(RelativePosition); //Eccentricity = Math.Sqrt(1 + (2 * TotalEnergy * TotalMomentum.MagSquared) / (ReducedMass * Math.Pow(GravitationalConstant * BodyOne.Mass * BodyTwo.Mass, 2))); IsBound = TotalEnergy < 0.0; SemiMajorAxis = SemiLatusRectum / (1 - Math.Pow(Eccentricity, 2)); }
public BasicBody WithDynamics(IDynamicBody newDynamics) => new BasicBody(newDynamics, EMProps, Material, CollisionShape, Shape, BoundVolume);