code: private List<Coordinate> getPossibleCoordinates(Coordinate coordinate) {
  		int xMin = Collections.binarySearch(sortedX, new Coordinate(coordinate.getX() - ruleDistance, 0),
  				new XComparator());
  		int xMax = Collections.binarySearch(sortedX, new Coordinate(coordinate.getX() + ruleDistance, 0),
  				new XComparator());
  		int yMin = Collections.binarySearch(sortedY, new Coordinate(0, coordinate.getY() - ruleDistance),
  				new YComparator());
  		int yMax = Collections.binarySearch(sortedY, new Coordinate(0, coordinate.getY() + ruleDistance),
  				new YComparator());
  		if (xMin < 0) {
  			xMin = Math.abs(xMin) - 1;
  		}
  		if (xMax < 0) {
  			xMax = Math.abs(xMax) - 1;
  		}
  		if (yMin < 0) {
  			yMin = Math.abs(yMin) - 1;
  		}
  		if (yMax < 0) {
  			yMax = Math.abs(yMax) - 1;
  		}
  
  		List<Coordinate> coordinates = new ArrayList<Coordinate>();
  		for (int i = xMin; i < xMax; i++) {
  			coordinates.add(sortedX.get(i));
  		}
  		for (int i = yMin; i < yMax; i++) {
  			coordinates.add(sortedY.get(i));
  		}
  
  		return coordinates;
  	}
docs: Return a possible list of coordinates that are within range of the given coordinate. This function is very fast
  as it uses binary search, and it returns a small subset of coordinates. The perfect set to start calculating
  from.