public ArrayList<Point> quickHullHelper(ArrayList<Point> pointsList, Point a, Point b){
		if (a.getX() == b.getX() && a.getY() == b.getY()){
			return new ArrayList<Point>();
		}
		if (pointsList.size() == 0){
			return new ArrayList<Point>();
		}

		int indexOfFarthestPoint = -1;
		double distanceOfFarthestPoint = -1;
		for (int i = 0; i < pointsList.size(); i++){
			double tempDistance = pointToLineDistance(a, b, pointsList.get(i));
			if (tempDistance > distanceOfFarthestPoint){
				distanceOfFarthestPoint = tempDistance;
				indexOfFarthestPoint = i;
			}
		}

		Point c = pointsList.get(indexOfFarthestPoint);
		System.out.println("Farthest point is " + c + " with distance " + distanceOfFarthestPoint + " and index " + indexOfFarthestPoint);
		double slopeOfAB = ((double)(a.getY() - b.getY()))/((double)(a.getX() - b.getX()));
		double slopeOfDividingLine = -1/slopeOfAB;

		double newY = -a.getX()*slopeOfAB*slopeOfDividingLine + a.getY()*slopeOfDividingLine + c.getX()*slopeOfAB*slopeOfDividingLine - c.getY()*slopeOfAB;
		newY = newY/(slopeOfDividingLine - slopeOfAB);

		double newX = (newY - a.getY())/slopeOfAB + a.getX();
		Point d = new Point((int)Math.round(newX), (int)Math.round(newY));

		ArrayList<Point> triangleList = new ArrayList<Point>();
		triangleList.add(a);
		triangleList.add(c);
		triangleList.add(b);
		ArrayList<Point> tempPointsList = PointsNotInRegion(pointsList, triangleList);


		//orientation: true = left, false = right
		ArrayList<Point> leftList = new ArrayList<Point>();
		ArrayList<Point> rightList = new ArrayList<Point>();



		for (int i = 0; i < tempPointsList.size(); i++){
			if (!(tempPointsList.get(i).getX() == c.getX() && tempPointsList.get(i).getY() == c.getY())){
				if (orientation(d, c, tempPointsList.get(i)) < 0){
					leftList.add(tempPointsList.get(i));
				}
				else{
					rightList.add(tempPointsList.get(i));
				}
			}
		}

		ArrayList<Point> returnListRight = quickHullHelper(rightList, a, c);
		ArrayList<Point> returnListLeft = quickHullHelper(leftList, c, b);
		ArrayList<Point> returnList = new ArrayList<Point>();

		returnList.addAll(returnListRight);
		returnList.add(c);
		returnList.addAll(returnListLeft);

		return returnList;
	}