How to find convex hull in a 3 dimensional space

Ninja420 picture Ninja420 · Aug 24, 2013 · Viewed 30.1k times · Source

Given a set of points S (x, y, z). How to find the convex hull of those points ?

I tried understanding the algorithm from here, but could not get much.

It says:

First project all of the points onto the xy-plane, and find an edge that is definitely on the hull by selecting the point with highest y-coordinate and then doing one iteration of gift wrapping to determine the other endpoint of the edge. This is the first part of the incomplete hull. We then build the hull iteratively. Consider this first edge; now find another point in order to form the first triangular face of the hull. We do this by picking the point such that all the other points lie to the right of this triangle, when viewed appropriately (just as in the gift-wrapping algorithm, in which we picked an edge such that all other points lay to the right of that edge). Now there are three edges in the hull; to continue, we pick one of them arbitrarily, and again scan through all the points to find another point to build a new triangle with this edge, and repeat this until there are no edges left. (When we create a new triangular face, we add two edges to the pool; however, we have to first check if they have already been added to the hull, in which case we ignore them.) There are O(n) faces, and each iteration takes O(n) time since we must scan all of the remaining points, giving O(n2).

Can anyone explain it in a more clearer way or suggest a simpler alternative approach.

Answer

Joseph O'Rourke picture Joseph O'Rourke · Aug 25, 2013

Implementing the 3D convex hull is not easy, but many algorithms have been implemented, and code is widely available. At the high end of quality and time investment to use is CGAL. At the lower end on both measures is my own C code:
     DCG Cover
In between there is code all over the web, including this implementation of QuickHull.