public static float FindMinSeparation(out int indexA, out int indexB, float t)
        {
            Transform xfA, xfB;

            _sweepA.GetTransform(out xfA, t);
            _sweepB.GetTransform(out xfB, t);

            switch (_type)
            {
            case SeparationFunctionType.Points:
            {
                Vector2 axisA = MathUtils.MulT(ref xfA.q, _axis);
                Vector2 axisB = MathUtils.MulT(ref xfB.q, -_axis);

                indexA = _proxyA.GetSupport(axisA);
                indexB = _proxyB.GetSupport(axisB);

                Vector2 localPointA = _proxyA.Vertices[indexA];
                Vector2 localPointB = _proxyB.Vertices[indexB];

                Vector2 pointA = MathUtils.Mul(ref xfA, localPointA);
                Vector2 pointB = MathUtils.Mul(ref xfB, localPointB);

                float separation = Vector2.Dot(pointB - pointA, _axis);
                return(separation);
            }

            case SeparationFunctionType.FaceA:
            {
                Vector2 normal = MathUtils.Mul(ref xfA.q, _axis);
                Vector2 pointA = MathUtils.Mul(ref xfA, _localPoint);

                Vector2 axisB = MathUtils.MulT(ref xfB.q, -normal);

                indexA = -1;
                indexB = _proxyB.GetSupport(axisB);

                Vector2 localPointB = _proxyB.Vertices[indexB];
                Vector2 pointB      = MathUtils.Mul(ref xfB, localPointB);

                float separation = Vector2.Dot(pointB - pointA, normal);
                return(separation);
            }

            case SeparationFunctionType.FaceB:
            {
                Vector2 normal = MathUtils.Mul(ref xfB.q, _axis);
                Vector2 pointB = MathUtils.Mul(ref xfB, _localPoint);

                Vector2 axisA = MathUtils.MulT(ref xfA.q, -normal);

                indexB = -1;
                indexA = _proxyA.GetSupport(axisA);

                Vector2 localPointA = _proxyA.Vertices[indexA];
                Vector2 pointA      = MathUtils.Mul(ref xfA, localPointA);

                float separation = Vector2.Dot(pointA - pointB, normal);
                return(separation);
            }

            default:
                Debug.Assert(false);
                indexA = -1;
                indexB = -1;
                return(0.0f);
            }
        }