From: jeffe@ocarina.CS.Berkeley.EDU (Jeff Erickson)
Newsgroups: comp.graphics.algorithms
Subject: Re: Searching for Preparata and Hong's algorithm
Date: 28 Mar 96 03:54:54 GMT
frank berwanger writes:
>I'm looking for Preparata and Hong's three-dimensional
>convex hull algorithm. Does anybody know where I can
>find an implemented version of this?
I recommend reading the following paper, which describes an
implementation of P&H's algorithm. However, I do *NOT* recommend
using the approach the paper describes. Day's implementation has a
number of problems, including omission of several degenerate cases,
complete lack of memory management, using trigonometry instead of
linear algebra to determine orientations of tetrahedra, and the
(perhaps forgivable in 1990) assumption that points are in general
position. However, the paper will give you some idea of just how
complex the algorithm is.
@article{d-iafch-90
, author = "A. M. Day"
, title = "The implementation of an algorithm to find the convex
hull of a set of $3$-d points"
, journal = "ACM Trans. Graph."
, volume = 9
, number = 1
, year = 1990
, pages = "105--132"
, keywords = "implementing algorithms, three-dimensional, convex
hull, points"
}
I'm not aware of any complete implementations of Preparata and Hong's
algorithm, and that's probably just as well.
I don't mean to cast aspersions on the people who discovered the
algorithm -- it was a great theoretical acheivement -- but there are
much simpler and more practical 3d convex hull algorithms available.
Preparata and Hong's algorithm is full of ugly special cases that more
recent algorithms don't have to worry about. The description of the
algorithm in Edelsbrunner's textbook requires 15 pages! (As far as I
know, this is the only complete description anywhere in the
literature.)
@book{e-acg-87
, author = "H. Edelsbrunner"
, title = "Algorithms in Combinatorial Geometry"
, series = "EATCS Monographs on Theoretical Computer Science"
, volume = 10
, publisher = "Springer-Verlag"
, address = "Heidelberg, West Germany"
, year = 1987
, keywords = "design of algorithms, discrete geometry, book"
}
You're much better off implementing an incremental algorithm, perhaps
with some initial preprocessing to get rid of "obviously" non-extreme
points. The code will be easier to write, easier to optimize, much
smaller, and probably much faster (especially if the points are
inserted in random order).
--
Jeff Erickson
jeffe@cs.berkeley.edu
http://www.cs.berkeley.edu/~jeffe