/// <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)); }