add a convex hull algorithm