/// <summary>
        /// Computes the rating for all points in input array based on RateVector()
        ///
        /// Array version
        /// </summary>
        /// <param name="pointsWithFeatures"></param>
        /// <returns></returns>
        private PointRated[] RatePoints(PointWithFeatures[] pointsWithFeatures)
        {
            PointRated[] ratedPoints = new PointRated[pointsWithFeatures.Count()];
            double       rating;

            for (int i = 0; i < ratedPoints.Count(); i++)
            {
                rating         = RateVector(pointsWithFeatures[i].featureVector);
                ratedPoints[i] = new PointRated(pointsWithFeatures[i], rating);
            }
            return(ratedPoints);
        }
        /// <summary>
        /// Adds random RatedPoints to list until ratedPoints.Count() == count
        /// </summary>
        /// <param name="ratedPoints"></param>
        /// <param name="d"></param>
        /// <param name="count"></param>
        /// <param name="border"></param>
        /// <param name="measures"></param>
        /// <param name="rnd"></param>
        private void AddPointsToList(List <PointRated> ratedPoints, IData d, int count, int border, int[] measures, Random rnd)
        {
            FeatureComputer featureComputer = new FeatureComputer();

            while (ratedPoints.Count() < count)
            {
                Point3D           point             = GenerateRandomPoint(border, measures, rnd);
                PointWithFeatures pointWithFeatures = new PointWithFeatures(point, featureComputer.ComputeFeatureVector(d, point).Features);
                PointRated        ratedPoint        = new PointRated(pointWithFeatures, RatePoint(pointWithFeatures));

                ratedPoints.Add(ratedPoint);
            }
        }