public override bool DropObject(Object2DBase obj) { var result = base.DropObject(obj); GenerateRadiusFromMass(); return(result); }
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); }
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); } }
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); } }