Convex Hull in Two Dimensions Jyun-Ming Chen Refs: deBerg et al. (Chap. 1) O’Rourke (Chap. 3) 1 Outline Definitions of CH Algorithms for CH Analysis of algorithms 2 Convex Hull Definition of convexity 凸包(Convex Hull) Convex hull of a point set S, CH(S) Smallest convex set containing S Intersection of all convex sets containing S 3 Convex Hull Why computing CH? Many reasons; e.g., faster collision detection How to compute CH? Good solutions come from: A thorough understanding of the geometric properties of the problem Proper application of algorithmic techniques and data structures 4 General Steps Sketch your problem in general position Observe the desired output and reason about the possible steps to get to the goal Check for degeneracy Time/resource complexity General case Best/worst cases 5 Computing CH … of a finite set P of n points in 2D Geometric intuition: Rubberband analogy Representation: Input: point set Output: CH(P): CWordered point set 6 Observation Def: convex edges Idea: Search through all pairs of points for convex edges Form a loop 7 Naïve Algorithm You can add a break here if you like … 8 Analysis of Naïve Algorithm Assumption: points are in general position (usually this is done first to simplify the code) (consider the degenerate cases later) How to compute “lie to the left of directed line”? Complexity analysis: O(n3) (n2–n)/2 pairs, each with n–2 other points to examine High complexity due to: simply translate geometric insight into an algorithm in a brute-force manner 9 Considering Degeneracy Collinearity: Modify the test to “all points to the right, or on the line” Does this solve the problem?! 10 Degenerate Case (cont) Consider numerical inaccuracy Two possibilities: 11 Jarvis’ March (Gift Wrapping) A modification of naïve algorithm Start at some extreme point, which is guaranteed to be on the hull. At each step, test each of the points, and find the one which makes the smallest right-hand turn. That point has to be the next one on the hull. The final CW loop is the CH. 12 Jarvis’ March (cont) Complexity Crude count: O(n2) Output sensitive O(nh), h:# of segments on the hull Worst case 13 A Better Algorithm Sort by x-coord The extreme points must be on the CH Goal: in 2 linked lists Upper hull: p1 to pn Lower hull: pn to p1 Idea: In CW manner, always making right turns If fail to turn right, delete previous point until the turn is correct. 14 15 Step-by-step 7 3 5 9 1 6 2 4 8 [1,2] 16 Step-by-step 7 3 5 9 1 6 2 4 8 [1,2,3] 17 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3] 18 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,4] 19 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,4,5] 20 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,5] 21 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,5,6] 22 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,5,6,7] 23 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,5,7] 24 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,7] 25 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,7,8] 26 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,7,8,9] 27 Step-by-step 7 3 5 9 1 6 2 4 8 [1,3,7,9] Upper hull completed 28 Algorithm (cont) This is a variation of Graham Scan Proof of correctness: p.8 Complexity analysis: O(n log n) Lexicographical sorting of points: O(n log n) Computation of lower hull: O(n) Consider the for and while 29 Consider Degeneracy Again … Effects on sorting Lexico. ordering Effects on making turns… 30 Other Version of Graham Scan 1. Find an extreme point. This point will be the pivot, 2. 3. is guaranteed to be on the hull, and is chosen to be the point with smallest y coordinate. Sort the points in order of increasing angle about the pivot. We end up with a star-shaped polygon (one in which one special point, in this case the pivot, can "see" the whole polygon). Build the hull, by marching around the star-shaped poly, adding edges when we make a left turn, and back-tracking when we make a right turn. 31 Graham Scan (ver2) Also handles collinearity 32 Incremental Algorithm Suitable for dynamic CGeom and 3D hull If pnCHn-1, CHn=CHn-1 Else Find two tangents, update CHn 33 Incremental Algorithm Input: a set of points P in 2D Output: a list L containing the points of CH(P) in CCW order 1. Take first three points of P to form a triangle 2. For i = 4 to n If (pi is in CHi-1) do nothing Else pi t1 FindTangent (pi, CHi-1)t1, t2 t2 CHi-1 Replace the items {t2 … t1} in L by {t2, pi, t1} 34 FindTangent (p, CH) (Go through all points in CH circularly) For each point pi If XOR (p is left_or_on (pi-1,pi), p is left_or_on(pi,pi+1)) Mark pi as the tangent point pi (There will be two tangent points) Determine t1, t2 t1 CHi-1 t2 35 Incremental Algorithm (cont) Finding Tangents … Analysis 36 Quick Hull Discard points in the extreme quadrilateral 37 Quick Hull (cont) Time complexity: Find extreme point c: O(n) Cost of recursive call: T(n) = O(n) + T(|A|) + T(|B|) Best case: |A| = |B| = n/2 T(n) = 2T(n/2) + O(n); T(n) = O(n log n) Worst case: |A| = 1, |B| = n-1 T(n) = T(n-1) + O(n); T(n) = O(n2) 38 Divide and Conquer Algorithm Computing 3D hull: Graham scan (probably not ∵angle sort) Preparata and Hong (1977) a-1 & a+1 at left side of ab b-1 & b+1 at left side of ab T(n) = 2T(n/2) + O(n); T(n) = O(n log n) 39 Extend to 3D 40 Floating Point Inaccuracies Handled by Interval arithmetic Exact (rational) arithmetic 41 Interval arithmetic Ref: http://www.eng.mu.edu/corlissg/VC02/READ_ME.html 42 Exact Math Rational arithmetic (never floating point) In[6]:= 1/12 - 7/9 + 31/36 Out[6]= - 1/6 The Exact Arithmetic Competition: Level 0 Tests Ref: XR 43 Exercise From this applet, develop a Graham scan algorithm that returns a CW-ordered convex hull Express the algorithm in pseudocode. Make sure it works for general position and degenerate cases (shown right) Run your example on test cases (general position and degeneracies) Explain the correctness and time complexity of divide-and-conquer algorithm 44 T ( n ) 2T ( n / 2 ) cn T ( n ) T ( n 1) cn T ( n 1) T ( n 2 ) c ( n 1 ) n 2 ( k log k T ( 2 ) 2T ( 2 k T (2 k 1 k 1 T (2 k 2 k 2 ) 2T ( 2 T ( 2 ) 2 2T ( 2 k 2 T ( n ) T ( n 2 ) c ( n 1) cn ) c2 ) 2T ( 2 T ( 2 ) 2 2T ( 2 k n) 2 k 2 k k 3 k 1 ) c2 ) c2 k 3 T ( n 3 ) c ( n 2 ) c ( n 1) cn k 1 ) c2 2 c 2 ) c2 c 1 2 n O ( n ) k 2 T (2 2 k 2 ) 2c 2 k k 2 k 2 2c 2 k 2 T (2 3 k 3 ) 3c 2 k T (2 ) 2 T (2 k m k m mk ) mc 2 T ( 2 ) 2 kc 2 k k k k T ( n ) n cn log n O ( n log n ) 45 More reference on the web. 46