/// <summary>
        /// Computes the feature vector for all points in array
        ///
        /// Array version
        /// </summary>
        private PointWithFeatures[] ComputeFeaturesForPoints(Point3D[] points, IData d)
        {
            PointWithFeatures[] pointsWithFeatures = new PointWithFeatures[points.Count()];
            FeatureComputer     featureComputer    = new FeatureComputer();

            for (int i = 0; i < points.Count(); i++)
            {
                Point3D  point         = points[i];
                double[] featureVector = featureComputer.ComputeFeatureVector(d, point).Features;
                pointsWithFeatures[i] = new PointWithFeatures(point, featureVector);
            }
            return(pointsWithFeatures);
        }
        /// <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);
            }
        }
 public PointRated(PointWithFeatures point, double rating) : base(point.X, point.Y, point.Z, point.featureVector)
 {
     this.rating = rating;
 }
 private double RatePoint(PointWithFeatures point)
 {
     return(RateVector(point.featureVector));
 }