UMass Lowell Computer Science 91.504 Advanced Algorithms Computational Geometry Prof. Karen Daniels Spring, 2007 O’Rourke Chapter 7 Search & Intersection Chapter 7 Search & Intersection Segment-Segment Intersection Segment-Triangle Intersection Point in Polygon Point in Polyhedron Intersection of Convex Polygons Intersection of Segments Intersection of Nonconvex Polygons Extreme Point of Convex Polygon Extremal Polytope Queries Planar Point Location Demo Segment/Segment Intersection http:/cs.smith.edu/~orourke/books/CompGeom/CompGeom.html Segment-Segment Intersection Finding the actual intersection point Approach: parametric vs. slope/intercept parametric generalizes to more complex intersections Parameterize each segment Lcd Lcd c C=d-c Lab c b a Lab b q(t)=c+tC A=b-a d d a p(s)=a+sA Intersection: values of s, t such that p(s) =q(t) : a+sA=c+tC Segment-Triangle Intersection Determine if qr intersects plane p containing triangle T. Let N=(A,B,C) be normal to p p :(x,y,z)dot(A,B,C)=D find N using cross-products involving a,b,c parameterize qr: p(t) = q + t(r-q) D (q N ) solve for t: t (r q) N using t, find point of intersection p if it exists Classify relationship between p and T r p c a T p b q +-- p is in T iff its projection p’ is in a projection* +-+ ++T’ of T to xy, xz or yz-plane +++ * avoid degeneracy by projecting out largest coordinate N -+- -++ T’ --+ Demo Point in Polygon http://cs.smith.edu/~orourke/books/CompGeom/CompGeom.html Point in Polygon q P Winding number standing at q, turn to follow border of P sum rotation to create signed angular turn + ccw divide by 2p elegant but not practical: O(n) with large constant - cw Ray crossings extend horizontal ray from q count number of intersections even odd beware q with P q is outside P q is inside P P degenerate intersections! Compare with using LeftOn test when polygon is convex O(n) P Point in Polyhedron r Winding number generalizes to 3D uses solid angle (fraction of sphere surface used by cone at point) q Ray crossing generalizes to 3D q inside P if odd number of crossings q outside P if even number of crossings Expected time O(rn) r = expected number of tries to get nondegenerate intersection Algorithm: POINT in POLYHEDRON Compute bounding radius R loop forever r0 = random ray of length R r = q + r0 crossings = 0 for each triangle T of polyhedron P do SegTriInt(T, q, r) if degenerate intersection then go back to loop else increment crossings appropriately if crossings odd then q is inside P else q is outside P Exit Demo Convex Polygon Intersection http:/cs.smith.edu/~orourke/books/CompGeom/CompGeom.html Intersection of Convex Polygons For nonconvex n-vertex P and m-vertex Q, the worst-case size complexity of P Q is in (nm) For convex P, Q, size is only in O(n m) and can be computed in O(n m) time A Q P B Algorithm: INTERSECTION of CONVEX POLYGONS /* A is directed edge on P */ Choose A and B arbitrarily /* B is directed edge on Q */ repeat /* A, B “chase” each other */ if A intersects B then /* A, B meet at each */ Check for termination /* boundary crossing */ Update inside flag Advance either A or B depending on geometric conditions until both A and B cycle their polygons Handle cases: P Q P Q P Q 0 O(n+m) Intersection of Segments Goal: “Output-size sensitive” polygon intersection algorithm Core Problem: “Output-size sensitive” line segment intersection algorithm Bentley-Ottmann plane sweep: O((n+k)logn) time k = number of intersection points in output Intuition: sweep line (discrete event simulation) First, review algorithm that returns TRUE iff there exists an intersection Intersection of >2 Line Segments Sweep-Line Algorithmic Paradigm: 33.4 source: 91.503 textbook Cormen et al. Intersection of >2 Line Segments Sweep-Line Algorithmic Paradigm: source: 91.503 textbook Cormen et al. Intersection of >2 Line Segments Time to decide if any 2 segments intersect:O(n lg n) Balanced BST stores segments in order of intersection with sweep line. Associated operations take O(lgn) time. Note that it exits as soon as one intersection is detected. 33.5 source: 91.503 textbook Cormenet et al. al. source: 91.503 textbook Cormen Intersection of Segments Goal: “Output-size sensitive” line segment intersection algorithm that actually computes all intersection points Bentley-Ottmann plane sweep: O((n+k)log(n+k))= O((n+k)logn) time k = number of intersection points in output Intuition: sweep horizontal line downwards just before intersection, 2 segments are adjacent in sweep-line intersection structure check for intersection only adjacent segments insert intersection event into sweep-line structure event types: top endpoint of a segment bottom endpoint of a segment intersection between 2 segments swap order Improved to O(nlogn+k) [Chazelle/Edelsbrunner] source: O’Rourke, Computational Geometry in C Intersection of Nonconvex Polygons Variation on BentleyOttmann sweep Maintain status for each piece of sweep line 0: exterior to P, Q P: inside P, outside Q Q: inside Q, outside P PQ: inside P , inside Q For n-vertex P, m-vertex Q, O((n+m)log(n+m)+k) time to compute: P Q P Q P\Q Extreme Point of Convex Polygon Algorithm: HIGHEST POINT of CONVEX POLYGON A Geometric /* highest point is in [a,b] */ Initialize a and b repeat forever Binary Search c index midway from a to b if P[c] is locally highest then return c A a c if A points up and C points down then [a,b] [a,c] /* highest point is in [a,c] */ C else if A points down and C points up then [a,b] [c,b] /* highest point is in [c,b] */ else if A points up and C points up B if P[a] is above P[c] b then [a,b] [a,c] Unimodality else [a,b] [c,b] /* highest point is in [c,b] */ else if A points down and C points down Allows if P[a] is below P[c] Binary Search then [a,b] [a,c] /* highest point is in [a,c] */ O(lg n) else [a,b] [c,b] /* highest point is in [c,b] */ Stabbing a Convex Polygon Extreme-Finding algorithm can stab a convex polygon a extreme in + u direction +u L y extreme in - u direction x b If a and b straddle L, binary search on [a,b] yields x binary search on [b,a] yields y O(lg n) Extremal Polytope Queries Form sequence of O(log n) simpler nested polytopes in O(n) time To answer a query in O(logn) time: Find extreme with respect to inner polytope, then work outwards Need only check small number of candidate vertices in next polytope Key idea: independent sets in planar graphs are “large”; vertices of “low” degree to construct next (inner) polytope, remove independent set of vertices deleting constant fraction of vertices at each step produces O(logn) polytopes Algorithm: INDEPENDENT SET Input: graph G Output: independent set I I 0 Mark all nodes of G of degree >= 9 while some nodes remain unmarked do Choose an unmarked node v Mark v and all neighbors of v I I U {v} An independent set of a polytope graph of n vertices produced by INDEPENDENT SET has size at least n/18 O(log n) Extremal Polytope Queries (continued) To use nested polytope hierarchy to answer an extreme point query: Find extreme with respect to inner polytope (brute-force search) Moving from polytope Pi+1 to Pi Let ai and ai+1 be uniquely highest vertices of Pi and Pi+1. Then either ai = ai+1 or ai+1 is the highest among the vertices adjacent to ai ai is the highest among the parents of the extreme edges Li+1 and Ri+1 L’i+1 = R’i+1 p’ P’i+1 tetrahedron projected onto xz plane p Extremal Polytope Queries (continued) Algorithm: EXTREME POINT of a POLYTOPE Input: polytope P and direction vector u u Output: vertex a of P extreme in u direction Construct nested polytope hierarchy P = P0, P1,..., Pk ak vertex of Pk extreme in u direction Compute Lk and Rk for i = k - 1, k - 2, ...,1, 0 do ai extreme vertex among ai+1 and parents of Li+1 and Ri+1 if ai = ai+1 then p Pk P0 for all edges incident to ai do save extreme edges Li and Ri else (ai = ai+1) compute Li from Li+1 etc... After O(n) time and space preprocessing, polytope extreme-point queries can be answered in O(log n) time each Planar Point Location Goal: Given a planar subdivision of n vertices, preprocess it so that point location query can be quickly answered. A polygonal planar subdivision can be preprocessed in O(n) time and space for O(log n) query. 2D version/variant of independent set/nested approach Monotone subdivision approach Randomized trapezoidal decomposition