Пример #1
0
        public override bool DropObject(Object2DBase obj)
        {
            var result = base.DropObject(obj);

            GenerateRadiusFromMass();
            return(result);
        }
Пример #2
0
        public virtual bool AddObject(Object2DBase obj)
        {
            ////Momentum Preserving Universe
            //Velocity = obj.Momentum / Mass;
            //Mass += obj.Mass;

            ////Energy Preserving Universe
            //Velocity = Vector2D.Sqrt(Vector2D.Pow(obj.Velocity, 2) * obj.Mass / Mass);
            var m1 = Mass;
            var m2 = obj.Mass;
            var m  = m1 + m2;
            var v1 = Velocity;
            var v2 = obj.Velocity;
            //var v = Vector2D.Sqrt((Vector2D.Pow(v1, 2) * m1 + Vector2D.Pow(v2, 2) * m2) / m);
            ///Calculate Direction ov velocity
            var vd = (v1 * m1 + v2 * m2) / m;
            //if (vd.X < 0) v.X *= -1;
            //if (vd.Y < 0) v.Y *= -1;
            var v = vd;

            Velocity = v;
            Mass     = m;
            obj.Mass = 0;
            return(true);
        }
Пример #3
0
 public virtual bool DropObject(Object2DBase obj)
 {
     //Momentum Preserving Universe
     if (obj.Mass > Mass)
     {
         return(false);
     }
     //else if (obj.Energy > Energy)
     //    return false;
     else
     {
         var m  = Mass;
         var v  = Velocity;
         var m2 = obj.Mass;
         var v2 = obj.Velocity;
         var m1 = m - m2;
         var v1 = (v * m - v2 * m2) / m1;
         Velocity = v1;
         Mass     = m1;
         return(true);
     }
 }
Пример #4
0
 public static Object2DBase FindBigObject(Object2DBase o1, Object2DBase o2)
 {
     if (o1.Mass > o2.Mass)
     {
         return(o1);
     }
     else if (o1.Mass < o2.Mass)
     {
         return(o2);
     }
     else if (o1.Energy > o2.Energy)
     {
         return(o1);
     }
     else if (o1.Energy < o2.Energy)
     {
         return(o2);
     }
     else
     {
         return(null);
     }
 }