Piazza link | Github link | Schedule | Code | Assignments
Computational geometry studies algorithms for problems that involve geometric data, such as finite sets of points, line segments and polygons. Some classical examples of geometric problems: Is a point inside a polygon? Do two polygons intersect? Given a set of points in 2D , find the closest pair of points; or, find the smallest convex polygons that contains them; or, find all points that fall in a given query range. What is visible from a point in a polygon? How many points are sufficient to guard any polygon? Given two sets of segments, find their intersections. Given a set of points, find the emallest enclosing circle. Given a set of polygonal obstacles, and a polygonal robot moving in 2D with tramnslation and rotation, plan its motion between a start and end location. And so on. Computational geometry is a very young and growing field, driven by applications in graphics, robotics, autonomous vehicles, vision, image processing,and GIS.
This class will cover basic topics in computational geometry:
Prerequisites: Data Structures (cs2100) and Algorithms (cs2200). In other words, knowledge of:
CS curriculum: This is a 3000-level class that fullfills the Algorithms/Theory requirement.
Class webpage: http://www.bowdoin.edu/~ltoma/teaching/cs3250-CompGeom/spring18/. This is hosted on my personal website at Bowdoin and will contain all class-related materials along the semester. You can bookmark this page or you can follow the link from my website. The class does not have a Blackboard website (this way it's publicly available to everyone).
For all class-related discussion we'll be using Piazza (link at top).
Textbooks: The following textbooks are suggested, not required. You can find them in Searles 224.
Collaboration policy: You can work alone, or you can pair with a partner (pair-programming).
Collaboration across teams is at level-1: that is, verbal collaboration without solution sharing. You are allowed and encouraged to discuss ideas with other class members, but the communication should be verbal and additionally it can include diagrams on board. Noone is allowed to take notes during the discussion (being able to recreate the solution later frommemory is proof that you actually understood it). Communication cannot include sharing pseudocode for the problem. Please read the department's collaboration policy.
Pair programming policy: If you chose to work with a partner, you must work together, physically in the same place, for the entire project that you do together. The overall project must be a true joint effort, equally owned, created and understood by both partners. Specifically splitting the problem into parts and working on them separately is not allowed and violates the honor code for the class. If you start together as a team and are unable to complete the project together, then you will each inherit teh shared code, and split up to work individually on the remainder of the project. You would then submit individually, with a note on what happened.
There are many advantages to working with a partner (e.g. more fun, more learning, good skill for the "real world"), and I encourage you to try. You may also consider alternating between working alone and with a partner, and changing partners.
Remember that you are responsible for reading, understanding, and adhering to the policy. If you have any questions about any aspects of the policy, please do not hesitate to ask for clarification.