static public double MINDIST(Offline.Rectangle Q, Offline.Rectangle R, double rate)
        {
            double distance = 0;

            for (int i = 0; i < Q.DIMENSIONS; i++)
            {
                if (R.min[i] > Q.max[i])
                {
                    distance += (R.min[i] - Q.max[i]) * (R.min[i] - Q.max[i]);
                }
                else
                if (R.max[i] < Q.min[i])
                {
                    distance += (R.max[i] - Q.min[i]) * (R.max[i] - Q.min[i]);
                }
            }
            return(Math.Sqrt(distance * rate));
        }
        static public double LB_PAA(List <double> C, Offline.Rectangle Q)
        {
            double        distance = 0;
            List <double> CMacron  = PAA(C, Q.DIMENSIONS);

            for (int i = 0; i < Q.DIMENSIONS; i++)
            {
                if (CMacron[i] > Q.max[i])
                {
                    distance += Math.Pow(CMacron[i] - Q.max[i], 2);
                }
                else
                if ((CMacron[i] < Q.min[i]))
                {
                    distance += Math.Pow(CMacron[i] - Q.min[i], 2);
                }
            }
            return(Math.Sqrt(distance));
        }
        static public double MINDIST(List <double> P_PAA, Offline.Rectangle R, double rate)
        {
            double distance = 0;

            int len = P_PAA.Count;

            for (int i = 0; i < len; i++)
            {
                if (R.min[i] > P_PAA[i])
                {
                    distance += (R.min[i] - P_PAA[i]) * (R.min[i] - P_PAA[i]);
                }
                else
                if (R.max[i] < P_PAA[i])
                {
                    distance += (R.max[i] - P_PAA[i]) * (R.max[i] - P_PAA[i]);
                }
            }
            return(Math.Sqrt(distance * rate));
        }