Overview

Instructor: Alex Steiger (asteiger AT cs.duke.edu)
Time: WF 10:05am-11:20am
Location: BioSci 063
Office Hours: Tues @ 2-3pm and Wed @ 3-4pm in D312 LSRC, and by appt. Please email if interested in attending OH via Zoom.

Course Description: Computational geometry is a fundamental area of study in computer science with a wide breadth of applications, such as robotics, graphics, vision, geographic information systems, and biology. This course is an accessible introduction to the field through a hands-on, project-based approach. We will explore the design, analysis, implementation, and application of algorithms for various geometric problems, with an emphasis on putting theory into practice through the programming projects.

Prerequisites: CompSci 201 or equivalent, specifically using basic data structures to design and implement algorithms via object-oriented programming and analyzing their asymptotic runtimes. There are no other prerequisites.

Topics (tentative, may change in response to collective interests):

  • Similarity search queries for spatial datasets via kd-trees and range trees
  • Windowing queries via interval and segment trees
  • Geometric primitives (“building blocks” of geometric algorithms)
  • Convex hulls
  • Dynamic data structures for evolving datasets
  • Point location via ray-shooting and persistent data structures
  • Polygon triangulation and boolean operations
  • Delaunay triangulations and applications, e.g., to terrain modeling
  • Voronoi diagrams with applications to nearest-neighbor search and path planning
  • Map overlays via segment intersection
  • Painter’s algorithm via binary space partitions
  • Mesh generation via quadtrees
  • Low-dimensional linear programming
  • Visibility graphs and combinatorial robot motion planning
  • Heuristical robot motion planning

Learning Objectives:

  • Implement and apply key geometric algorithms and data structures to solve practical computational problems.
  • Analyze the performance of geometric algorithms, formally and empirically.
  • Use existing software tools and libraries to effectively implement and visualize geometric computations.

Assessment: There will be five programming projects, where four are worth 16% and one is worth 22%, for a total of 86%. The remaining 14% is awarded for engagement: 0.5% per lecture (four absences allowed) for participating in exercises/discussions and 2% for completing course surveys/evaluations.

Textbook: Computational Geometry: Algorithms and Applications by de Berg et al. The 2nd or 3rd editions suffice for our class. Any other resources will be provided on Canvas.

Programming Environment: This course assumes familiarity with object-oriented programming, satisfied by CompSci 201. Our projects are in Python 3.9+, but you do not need knowledge of Python in particular. You may use any editor, but we recommend Visual Studio Code, PyCharm, and Juypter. The following resources may be useful:

Image credits: anonymous (https://commons.wikimedia.org/wiki/File:Coloured_Voronoi_3D_slice.svg), “Coloured Voronoi 3D slice”, https://creativecommons.org/licenses/by-sa/3.0/legalcode, accessed 8/24/2024