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.