Handouts: Course information sheet
1/26/09: Introduction to the course requirements, prerequisites, etc.
The introductory class on January 26 (
Powerpoint slides are available) gave an overview of
what computational geometry is and what types of problems
we study in the course. I included some demos, which are
applets linked from the slides.
Background:
(a). geometry: vectors, dot product, cross product
(b). AMS301 material: counting, recursion, graphs
(c). algorithms: big-Oh notation (O(f(n)), Omega(F(n))),
reading code (C,C++,Java) and pseudo-code
Applications discussed briefly:
(1) Point-in-polygon test. Shoot a ray and count the number of crossings; odd implies
the point is inside the polygon. O(n) time to do this.
We can do better if we are allowed to preprocess the polygon. Then it will be possible
to do point-in-polygon queries in time O(log n), after O(n) preprocessing.
(2) Convex hull of n points in the plane. We will be able to
do this in O(n log n) time, which is the best possible (essentially).
(3) Line segment intersection. Find all k intersection points among n line segments.
Naive: O(n^2). Ultimately, this has been solved in output-sensitive time O(k + n log n),
by Chazelle and Edelsbrunner; we will see a slightly less efficient
algorithm in class. If we just care yes or no if there EXISTS
an intersection, this can be done in O(n log n) time, as we will see.
(4) Shortest paths for a mobile robot moving among polygonal obstacles.
(5) Triangulation of a simple polygon. Application: graphics (painting a polygon on the
screen). Ultimately, this was solved in linear (O(n)) time by Chazelle (1990).
We will see an O(n log n) algorithm. In practice, you want to use
"FIST", developed here at Stony Brook by Martin Held.