示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }
示例#4
0
        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));
        }  
示例#5
0
 public BasicBody WithDynamics(IDynamicBody newDynamics) => new BasicBody(newDynamics, EMProps, Material, CollisionShape, Shape, BoundVolume);
示例#6
0
 public BasicBody WithDynamics(IDynamicBody newDynamics) => new BasicBody(newDynamics, EMProps, Material, CollisionShape, Shape, BoundVolume);