private void Collide(MonoPhysicalSphere a, MonoPhysicalSphere b)
        {
            //if (a == null || b == null)
            //    return;

            if (a.IsLastColliderEqual(b) || b.IsLastColliderEqual(a))
            {
                return;
            }

            a.SetLastCollider(b);
            b.SetLastCollider(a);

            float dot       = Vector3.Dot(a.Velocity, b.Velocity);
            float dist      = Vector3.Distance(a.transform.position, b.transform.position);
            float radiusSum = a.Radius + b.Radius;

            if (dist > radiusSum)
            {
                return;
            }

            //Debug.Log("Collision");

            Vector3 aToB = (b.transform.position - a.transform.position).normalized;

            Vector3 pushFromA = radiusSum * aToB;

            // position correction
            b.transform.position = a.transform.position + 1f * pushFromA;
            //a.transform.position = b.transform.position - 0.5f * pushFromA;

            TwoDimensionReflection(a, b);
        }