Esempio n. 1
0
        public void ApplyForce(ref Body b1, ref Body b2, double deltaT)
        {
            var direction = b1.DirectionTo(b2);
            var dist = direction.Magnitude;
            var f = G * b1.Mass * b2.Mass / (dist * dist);
            var dirNorm = direction.UnitVector;

            b1.Vel -= f * deltaT / b1.Mass * dirNorm;
            b2.Vel += f * deltaT / b2.Mass * dirNorm;
        }
Esempio n. 2
0
        public void ApplyForce(ref Body b1, ref Body b2, double deltaT)
        {
            if (b1.DistanceTo(b2) > (b1.Radius + b2.Radius) * CollisionDepth)
                return;

            if (b1.DistanceTo(b2) < (b1.Radius + b2.Radius) * AbsorbDepth)
            {
                if (b1.Mass > b2.Mass)
                {
                    b1.Mass += b2.Mass;
                    b1.Radius = Math.Sqrt(b1.Radius*b1.Radius + b2.Radius* b2.Radius);
                    b2.Delete();
                }
                else
                {
                    b2.Mass += b1.Mass;
                    b1.Radius = Math.Sqrt(b1.Radius * b1.Radius + b2.Radius * b2.Radius);
                    b1.Delete();
                }
            }

            var b1dot = (b1.Vel - b2.Vel) * (b1.Pos - b2.Pos);
            var b1mag = (b1.Pos - b2.Pos).Magnitude;
            var b1DotNormal = b1dot / (b1mag * b1mag);

            var v1delta  = (b1.Pos - b2.Pos) * (2 * b2.Mass / (b1.Mass + b2.Mass)) * b1DotNormal;

            var b2dot = (b2.Vel - b1.Vel) * (b2.Pos - b1.Pos);
            var b2mag = (b2.Pos - b1.Pos).Magnitude;
            var b2DotNormal = b2dot / (b2mag * b2mag);

            var v2Delta = (b2.Pos - b1.Pos) * (2 * b1.Mass / (b1.Mass + b2.Mass)) * b2DotNormal;

            b1.Vel -= v1delta;
            b2.Vel -= v2Delta;
        }
Esempio n. 3
0
 public double DistanceTo(Body other)
 {
     return DirectionTo(other).Magnitude;
 }
Esempio n. 4
0
 public Vector2D DirectionTo(Body other)
 {
     return Pos - other.Pos;
 }
Esempio n. 5
0
 public void ApplyForce(ref Body b1, ref Body b2, double deltaT)
 {
 }