Handouts:
11/6/08: Point Location Search (Chap 6)
One-shot solutions to test if q lies in a simple polygon (or find
which face of a polygonal subdivision contains q): O(n) time by
counting the number of crossings of, say, a leftwards ray from q. (Be
careful about degeneracies!) Can also do with "winding number" in
O(n) time.
Slab method of point location: uses a lot of storage (O(n^2))
Kirkpatrick's method: hierarchical triangulation to build a DAG.
At each phase, find a large independent set of low-degree vertices,
remove, and retriangulate the "craters" that result. Build a DAG that
connects a triangle from stage i to a triangle from stage i+1 iff
the triangles overlap.
The method gives O(n) space, O(n) preprocessing time (given
a triangulated subdivision), and O(log n) query, which is optimal.
If the subdivision is not already triangulated, then in time O(n log n)
each face can be triangulated (even if there are holes in faces; if there
are no holes in faces (the subdivision is "simple"), then O(n) suffices
to triangulate the full subdivision).
I introduce the search DAG given in the text (Chapter 6). More details
next time.