Algorithms
NonLecture N: Convex Hulls
N
Convex Hulls
N.1
Definitions
We are given a set
P
of
n
points in the plane. We want to compute something called the
convex hull
of
P
. Intuitively, the convex hull is what you get by driving a nail into the plane at each point and
then wrapping a piece of string around the nails. More formally, the convex hull is the smallest convex
polygon containing the points:
•
polygon:
A region of the plane bounded by a cycle of line segments, called
edges
, joined endtoend
in a cycle. Points where two successive edges meet are called
vertices
.
•
convex:
For any two points
p
,
q
inside the polygon, the line segment
pq
is completely inside the
polygon.
•
smallest:
Any convex proper subset of the convex hull excludes at least one point in
P
. This
implies that every vertex of the convex hull is a point in
P
.
We can also define the convex hull as the
largest
convex polygon whose vertices are all points in
P
, or
the
unique
convex polygon that contains
P
and whose vertices are all points in
P
. Notice that
P
might
have
interior
points that are not vertices of the convex hull.
A set of points and its convex hull.
Convex hull vertices are black; interior points are white.
Just to make things concrete, we will represent the points in
P
by their Cartesian coordinates,
in two arrays
X
[
1
..
n
]
and
Y
[
1
..
n
]
.
We will represent the convex hull as a circular linked list of
vertices in counterclockwise order. if the
i
th point is a vertex of the convex hull,
nex t
[
i
]
is index of
the next vertex counterclockwise and
pred
[
i
]
is the index of the next vertex clockwise; otherwise,
nex t
[
i
] =
pred
[
i
] =
0. It doesn’t matter which vertex we choose as the ‘head’ of the list. The decision
to list vertices counterclockwise instead of clockwise is arbitrary.
To simplify the presentation of the convex hull algorithms, I will assume that the points are in
general
position
, meaning (in this context) that
no three points lie on a common line
. This is just like assuming
that no two elements are equal when we talk about sorting algorithms. If we wanted to really implement
these algorithms, we would have to handle colinear triples correctly, or at least consistently. This is fairly
easy, but definitely not trivial.
N.2
Simple Cases
Computing the convex hull of a single point is trivial; we just return that point. Computing the convex
hull of two points is also trivial.
For three points, we have two different possibilities — either the points are listed in the array in
clockwise order or counterclockwise order. Suppose our three points are
(
a
,
b
)
,
(
c
,
d
)
, and
(
e
,
f
)
, given
in that order, and for the moment, let’s also suppose that the first point is furthest to the left, so
a
<
c
1
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
Algorithms
NonLecture N: Convex Hulls
and
a
<
f
. Then the three points are in counterclockwise order if and only if the line
←→
(
a
,
b
)(
c
,
d
)
is less
than the slope of the line
←→
(
a
,
b
)(
e
,
f
)
:
counterclockwise
⇐⇒
d

b
c

a
<
f

b
e

a
Since both denominators are positive, we can rewrite this inequality as follows:
counterclockwise
⇐⇒
(
f

b
)(
c

a
)
>
(
d

b
)(
e
This is the end of the preview.
Sign up
to
access the rest of the document.
 Spring '09
 A
 Convex hull, Convex hull algorithms, Timothy Chan

Click to edit the document details