An Introduction to Computational Geometry Joseph S. B. Mitchell Stony Brook University Mini-Course Info Joe Mitchell (Math 1-109) jsbm@ams.sunysb.edu (631-632-8366) http://www.ams.sunysb.edu/~jsbm/nasa/tutorial.html Recommended Texts: • Computational Geometry, by Mark de Berg, Marc van Kreveld, Mark Overmars and Otfried Schwartzkopf (2nd edition) • Computational Geometry in C, by Joe O’Rourke (2nd Edition) Surveys/Reference books: • CRC Handbook of Discrete and Computational Geometry, editted by Goodman and O’Rourke (2nd edition) • Handbook of Computational Geometry, editted by Sack and Urrutia Sessions and Topics Session 1: • Introduction • Convex Hulls in 2D, 3D • A variety of algorithms Session 2: • Searching for intersections: Plane sweep • Halfspace intersections, low-dimensional linear programming (LP) • Range Search 3 Sessions and Topics Session 3: • Triangulation • Proximity: Voronoi/Delaunay diagrams • Point location search Session 4: • Arrangements • Duality and applications • Visibility graphs, shortest paths 4 Sessions and Topics Session 5: • Spatial partitioning, optimization, load balancing • Binary Space Partitions • Clustering trajectories Session 6: • GeoSect: Overview and algorithms • 3D partitioning • Flow-respecting partitioning 5 Outline Intersection search Linear programming, halfspace intersections Range Search 6 Intersection Search Input: A set S of geometric objects (segments, polygons, disks, solid models, etc) 7 Intersection Search Versions of the problem: • DETECT: Answer yes/no: Are there any intersections among the objects S? (if “yes”, then we may insist on returning a witness) • REPORT: Output all pairs of objects that intersect • COMPUTE: Compute the common intersection of all objects • COUNT: How many pairs intersect? • QUERY: Preprocess S to support fast queries of the form “Does object Q intersect any member of S?” (or “Report all intersections with Q”) May also want to insert/delete in S, or allow objects of S to move. 8 Intersection Search: Segments Segment intersection: Given a set S of n line segments in the plane, determine: • Does some pair intersect? (DETECT) • Compute all points of intersection (REPORT) Naïve: O(n2) CG: O(n log n) DETECT, O(k+n log n) REPORT Element Uniqueness Input: {x1, x2, …,xn } Are they distinct? (yes/no) (n log n) Lower Bound to DETECT: (n log n) , from ELEMENT UNIQUENESS Primitive Computation Does segment ab intersect segment cd ? • Types of “intersect” • Test using “Left” tests (sign of a cross product (determinant), which determines c the orientation of 3 points) Left( a, b, c ) = TRUE ab ac > 0 • Time O(1) (“constant”) a b c is left of ab 10 Bentley-Ottmann Sweep Main idea: Process events in order of discovery as a vertical line, L, “sweeps” over the scene, from left to right Two data structures: L • SLS: Sweep Line Status: bottom-to-top ordering of the segments intersecting L • EQ: Event Queue 11 Two data structures: • SLS: Sweep Line Status: bottom-to-top ordering of the segments intersecting L • EQ: Event Queue Initialize: • SLS = • EQ = sorted list of segment endpoints L O(n log n) How to store: • SLS: balanced binary search tree (dictionary, support O(log n) insert, delete, search) • EQ: priority queue (e.g., heap) 12 Event Handling Hit left endpt of e O(log n) a e b L Hit right endpt of e L a e O(log n) Find segs a and b above/below e in SLS. Insert e into SLS. Test(a,e), Test(b,e) and insert crossings (if any) in EQ b Find segs a and b above/below e in SLS. Delete e from SLS. Test(a,b), and insert crossing (if any) in EQ Hit crossing point e f (only needed in REPORT) O(log n) e a Exchange e, f in SLS. Test(a,f), Test(b,e) and insert crossings (if any) in EQ b f L 13 Algorithm Analysis Invariants of algorithm: • SLS is correctly ordered. • Test(a,b) for intersection is done whenever segments a and b become adjacent in the SLS order Discovered crossings are inserted into EQ (for REPORT; for DETECT, stop at first detected crossing) Claim: All crossings are discovered Time: O(n log n) to DETECT (O(n) events @ O(log n) ) Time: O((n+k) log n) to REPORT (O(n+k) events @ O(log n) ) Example Applet k = # crossings = output size Another nice applet 14 Optimal REPORT algorithms exist: • O(k + n log n) [Chazelle-Edelsbrunner, Balaban] (Complex) Special Case: REPORT for horiz/vert segs • Bentley-Ottmann sweep: O(k + n log n) Special case: Simplicity testing • O(n), from Chazelle triangulation Sweeping applies also to • Unions • Intersections • Arrangements 15 Data Structures for Planar Subdivisions Winged Edge Data Structure. Quad Edge Data Structure. Our focus on “Doubly Connected Edge List”. • Every edge e is struct: – e.org, e.dest: pointer to origin and dest vertices. – e.face is face on left of edge – e.twin is the same edge, oriented the other direction. – e.next is next edge along the face v2 v3 v1 f0 e e4,0 v7 e’s f 1 twin v0 e0,1 v6 v5 v4 [DCEL: doubly connected edge list] - represent edge as 2 halves - lists: vertex, face, edge/twin -facilitates face traversal Ack: R. Pless DCEL v2 • Every edge e is struct: – e.org, e.dest: pointer to origin and dest vertices. – e.face is face on left of edge – e.twin is the same edge, oriented the other direction. • Each Face has a pointer to one edge of that face. • Each vertex has pointer to one edge away from that vertex. v3 v1 f0 e e4,0 v7 e’s f 1 twin v0 e0,1 v6 v5 v4 Pop quiz. -How to enumerate all edges of a face? -How to enumerate all edges incident on a node? Ack: R. Pless Practical Methods, 3D Uniform grid Quadtrees With each pixel, store a list of objects intersecting it. Do brute force on pixel-by-pixel basis. See Samet books, SAND website Bounding volume hierarchies 18 Bounding Volume Hierarchies Input: Set S of objects. S Bounding volume 19 QuickCD: Collision Detection The 2-Box Cover Problem • Find “smallest” (tightest fitting) pair of bounding boxes • Motivation: Best outer approximation Bounding volume hierarchies Bounding Volume Hierarchy BV-tree: Level 0 k-dops BV-tree: Level 1 6-dops 14-dops 18-dops 26-dops BV-tree: Level 2 BV-tree: Level 5 BV-tree: Level 8 Large Convex Inner Approx “Grow” k-dops from selected seed points: collision detection (QuickCD), response Outline Intersection search Linear programming, halfspace intersections Range Search 28 Linear Programming Maximize Subject to: c1x1 + c2x2 + ... + cdxd a1,1x1 + ... a1,dxd b1 a2,1x1 + ... a2,dxd b2 : : : an,1x1 + ... an,dxd bn Matrix form: max cT x s.t. Ax b Linear Program (LP) of dimension d: c = (c1,c2,...,cd) hi = {(x1,...,xd) ; ai,1x1 + ... + ai,dxd bi} li = hyperplane for halfspace hi (straight lines, if d=2 ) H = {h1, ... , hn} 29 Linear Programming Background Dantzig [40’s]: Simplex method • Works well in practice, but not poly-time Khachian et al. [79-]: Ellipsoid algorithm • Weakly poly-time Karmarkar et al.[84+]: Interior-point methods • Weakly poly-time and practical extensions/variants Megiddo; Dyer; Clarkson; Seidel [84-90] : • Low-dimensional strongly poly-time O(n) Here: Simple O(n) randomized [Seidel] 30 One Approach to 2D LP Construct the feasible region: • • • • Q = intersection of all n halfplanes, h1, h2, …, hn convex polygon Divide and conquer: T(n) 2T(n/2) + O(n) merge Merge: Intersect 2 convex polygons 4 sorted lists: upper/lower chain of each Merge the 4 lists O(n) Sweep left to right, constructing intersection Total Time to construct Q: O(n log n) Best possible: (n log n), from SORTING Key Idea: It is “easier” to find the lowest point of31Q (solve LP) than to construct the feasible region Q Randomized Incremental LP Constraints added in random order Assume we start with h1 , h2 feasible Add hi Cases: • (1) Constraint hi already satisfied: Do nothing • (2) Constraint hi violated: Solve 1D LP, time O(i) 32 Randomized Incremental 2D LP WLOG: All halfspaces are “upwards”, c = (0,-1) c 33 c 1D LP Constraint violation! 35 Analysis of Randomized Incremental LP Constraints added in random order Assume we start with h1 , h2 feasible Add hi Cases: • (1) Constraint hi already satisfied: Do nothing • (2) Constraint hi violated: Solve 1D LP, time O(i) P( case (2) ) 2/i (backwards analysis) E( work to insert hi ) = (2/i )O(i ) = O(1) Total expected work = O(n) 36 LP-Type Problems Example: Minimum enclosing ball (MEB), min-enclosing ellipsoid, etc. O(n) in any fixed dimension But, exponential dependance on dimension See [KMY03] talk In high dimensions: use core-sets to get (1+)-approximation using coreset of size O(1/), independent of dimension 37 Outline Intersection search Linear programming, halfspace intersections Range Search 38 Range Search Input: Set S of n points Preprocess to support range search queries • • • • axis-aligned boxes (orthogonal range search) Halfspaces Disks Triangles, simplices, polyhedra 39 Kd-tree demo Range Search Grids Quadtrees Kd-trees Partition trees R-trees and variants; bounding volume hierarchies Range trees: Orthogonal range search: • Decompose x-coordinates into “canonical intervals” • Associated with each node of 1D range tree is a y-search structure • Query is decomposed into O(log n) 1D queries, one per canonical x-interval Range tree Applet 40