/// <summary>
        /// Find a point far enough away from the previous points,
        /// but do not record it yet as a Previous Point.
        /// </summary>
        /// <param name="uPoint">UnsignedPoint made from the returned array, or null.</param>
        /// <returns>A point well-separated from all previous points, or null if none could be found.
        /// </returns>
        public int[] FindSeparatedPoint(out UnsignedPoint uPoint)
        {
            var minDistSquared = (long)Math.Ceiling(MinimumDistance * MinimumDistance);
            var tries          = 0;
            var point          = new int[Dimensions];

            while (tries < 100)
            {
                for (var iDim = 0; iDim < AffectedDimensions.Count; iDim++)
                {
                    point[iDim] = Rng.Next(Minimum, Maximum);
                }
                var pt = new UnsignedPoint(point); // Copies the array.
                if (!PreviousPoints.Any(p => p.Measure(pt) < minDistSquared))
                {
                    uPoint = pt;
                    return(point);
                }
                tries++;
            }
            uPoint = null;
            return(null);
        }
        public bool IsSeparatedPoint(UnsignedPoint pt)
        {
            var minDistSquared = (long)Math.Ceiling(MinimumDistance * MinimumDistance);

            return(!PreviousPoints.Any(p => p.Measure(pt) < minDistSquared));
        }