cg-convexhull1 - bowdoin collegetitle cg-convexhull1.key created date 4/21/2017 7:13:17 pm
TRANSCRIPT
![Page 1: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/1.jpg)
Planar convex hulls (I)
Computational Geometry [csci 3250] Laura Toma
Bowdoin College
![Page 2: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/2.jpg)
Convex Hull
Given a set P of points in 2D, their convex hull is the smallest convex polygon that contains all points of P
![Page 3: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/3.jpg)
Convexity
A polygon P is convex if for any p, q in P, the segment pq lies entirely in P.
convex non-convex
![Page 4: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/4.jpg)
Convex Hull
Given a set P of points in 2D, their convex hull is the smallest convex polygon that contains all points of P
![Page 5: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/5.jpg)
Convex Hull
The problem: Given a set P of points in 2D, describe an algorithm to compute their convex hull
output: list of points on the CH (in boundary order)
![Page 6: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/6.jpg)
• One of the first problems studied in CG • Many solutions
• simple, elegant, intuitive, expose techniques • Lots of applications
• robotics • path planning • partitioning problems • shape recognition • separation problems
Convex Hull
![Page 7: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/7.jpg)
• Path planning: find (shortest) collision-free path from start to end
Applications
start
end
obstacle
![Page 8: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/8.jpg)
• Path planning: find (shortest) collision-free path from start to end
• It can be shown that the path follows CH(obstacle) and shortest path s to t is the shorter of the upper path and lower path
Applications
start
end
obstacle
![Page 9: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/9.jpg)
• Shape analysis, matching, recognition • approximate objects by their CH
Applications
![Page 10: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/10.jpg)
• Partitioning problems • does there exist a line separating two objects?
Applications
YES
![Page 11: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/11.jpg)
• Partitioning problems • does there exist a line separating two objects?
Applications
NO
![Page 12: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/12.jpg)
• Find the two points in P that are farthest away
Applications
![Page 13: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/13.jpg)
• Find the two points in P that are farthest away
Applications
![Page 14: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/14.jpg)
Outline
• Properties of CH
• Algorithms for computing the CH (P) • Brute-force • Gift wrapping (or: Jarviz march) • Quickhull • Graham scan • Andrew’s monotone chain • Incremental • Divide-and-conquer
• Can we do better? • Lower bound
![Page 15: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/15.jpg)
Convexity: algebraic view
• Segment pq = set of all points of the form c1p+c2q, with c1,c2 in [0,1], c1+c2=1
• A convex combination of points p1, p2, …pk is a point of the form
c1p1+c2p2+…ckpk, with ci in [0,1], c1+c2+…+ck=1 • Example: a triangle consists of all convex combinations of its 3 vertices • With this notation, the convex hull CH(P) = all convex combinations of points in P
p
q
c1p + (1-c1)qp1
p3
p2
c1p1+c2p2+(1-c1-c2)p3
![Page 16: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/16.jpg)
Convex Hull Properties
![Page 17: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/17.jpg)
Extreme points• A point p is extreme if there exists a line l through p, such that all the other points of
P are on the same side of l (or on l)
![Page 18: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/18.jpg)
Extreme points• A point p is extreme if there exists a line l through p, such that all the other points of
P are on the same side of l (and not on l)
extreme
![Page 19: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/19.jpg)
Extreme points• A point p is extreme if there exists a line l through p, such that all the other points of
P are on the same side of l (and not on l)
extreme
![Page 20: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/20.jpg)
Extreme points• A point p is extreme if there exists a line l through p, such that all the other points of
P are on the same side of l (and not on l)
extreme
extreme
![Page 21: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/21.jpg)
Extreme points• A point p is extreme if there exists a line l through p, such that all the other points of
P are on the same side of l (and not on l)
degenerate casesdegenerate
cases: can be
considered on CH or not
![Page 22: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/22.jpg)
• Claim: If a point is on the CH if and only if (iff) it is extreme.
Extreme points
![Page 23: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/23.jpg)
Extreme points• Claim: If a point is on the CH if and only if (iff) it is extreme.
![Page 24: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/24.jpg)
CH Variants
• Several types of convex hull output are conceivable • all points on the convex hull in arbitrary order • all points on the convex hull in boundary order • only non-collinear points in arbitrary order • only non-collinear points in boundary order
• It may seem that computing in boundary order is harder • we’ll see that identifying the extreme points is Omega(n lg n) • so sorting is not dominant
<—— exclude collinear points
![Page 25: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/25.jpg)
Interior points • A point p is not on the CH if and only if p is contained in the interior of a triangle
formed by three other points of P (or in interior of a segment formed by two points).
![Page 26: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/26.jpg)
Extreme edges• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on)
![Page 27: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/27.jpg)
Extreme edges
extreme
not extreme
• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on)
![Page 28: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/28.jpg)
Extreme edges• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on) • Claim: A pair of points (pi, pj) form an edge on the CH iff edge (pi, pj) is extreme.
extreme
![Page 29: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/29.jpg)
Extreme edges• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on) • Claim: A pair of points (pi, pj) form an edge on the CH iff edge (pi, pj) is extreme.
extreme
![Page 30: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/30.jpg)
Extreme edges• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on) • Claim: A pair of points (pi, pj) form an edge on the CH iff edge (pi, pj) is extreme.
extreme
![Page 31: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/31.jpg)
Extreme edges• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on) • Claim: A pair of points (pi, pj) form an edge on the CH iff edge (pi, pj) is extreme.
extreme
![Page 32: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/32.jpg)
Extreme edges• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on) • Claim: A pair of points (pi, pj) form an edge on the CH iff edge (pi, pj) is extreme.
extreme
![Page 33: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/33.jpg)
Extreme edges• An edge (pi, pj) is extreme if all the other points of P are on one side of it (or on) • Claim: A pair of points (pi, pj) form an edge on the CH iff edge (pi, pj) is extreme.
extreme
![Page 34: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/34.jpg)
CH by finding extreme edges
![Page 35: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/35.jpg)
Brute force
Algorithm (input P) • for all distinct pairs (pi, pj)
• check if edge (pi,pj) is extreme
• Analysis?
![Page 36: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/36.jpg)
Gift wrapping (1970)
• Observations • CH consists of extreme edges • each edge shares a vertex with
next edge
• Idea: use an edge to find the next one
p
q
r
• How to find an extreme edge to start from? • Given an extreme edge, how to find the next one?
![Page 37: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/37.jpg)
Gift wrapping (1970)
p
q
r
Can you think of some points that are guaranteed to be in CH?
![Page 38: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/38.jpg)
Gift wrapping (1970)
• Claim • point with minimum x-coordinate is extreme • point with maximum x-coordinate is extreme • point with minimum y-coordinate is extreme • point with maximum y-coordinate is extreme
• Proof
![Page 39: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/39.jpg)
Gift wrapping (1970)
![Page 40: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/40.jpg)
Gift wrapping (1970)
• Start from point with smallest x-coordinate • if more then one, pick right most
![Page 41: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/41.jpg)
Gift wrapping (1970)
• Start from point with smallest x-coordinate • if more then one, pick right most
//find first edge. HOW ?
![Page 42: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/42.jpg)
Gift wrapping (1970)
• Start from point with smallest x-coordinate • if more then one, pick right most
//find first edge. HOW ?
![Page 43: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/43.jpg)
Gift wrapping (1970)
• Start from point with smallest x-coordinate • if more then one, pick right most
//find first edge. HOW ?
minimum slope
![Page 44: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/44.jpg)
Gift wrapping (1970)
• Start from point p with smallest x-coordinate • if more then one, pick right most
//find first edge • for each point q (q != p)
• compute ccw-angle of q wrt p • let p’ = point with smallest angle
• output (p, p’) as first edge • //what next ?
p
p’
![Page 45: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/45.jpg)
Gift wrapping (1970)
• Start from point p with smallest x-coordinate • if more then one, pick right most
//find first edge • for each point q (q != p)
• compute ccw-angle of q wrt p • let p’ = point with smallest angle
• output (p, p’) as first edge • repeat from p’
p
p’
![Page 46: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/46.jpg)
• p0 = point with smallest x-coordinate (if more then one, pick right most) • p = p0 • repeat
• for each point q (q != p) • compute ccw-angle of q wrt p • let p’ = point with smallest angle
• output (p, p’) as CH edge • p = p’
• until p = p0 //until it discovers first point again
Gift wrapping (1970)
p
p’
![Page 47: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/47.jpg)
• p0 = point with smallest x-coordinate (if more then one, pick right most) • p = p0 • repeat
• for each point q (q != p) • compute ccw-angle of q wrt p • let p’ = point with smallest angle
• output (p, p’) as CH edge • p = p’
• until p = p0 //until it discovers first point again
Gift wrapping (1970)
p0
p
![Page 48: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/48.jpg)
• p0 = point with smallest x-coordinate (if more then one, pick right most) • p = p0 • repeat
• for each point q (q != p) • compute ccw-angle of q wrt p • let p’ = point with smallest angle
• output (p, p’) as CH edge • p = p’
• until p = p0 //until it discovers first point again
Gift wrapping (1970)
p0
p
p’
![Page 49: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/49.jpg)
• p0 = point with smallest x-coordinate (if more then one, pick right most) • p = p0 //the initial point • repeat
• for each point q (q != p) • compute ccw-angle of q wrt p • let p’ = point with smallest angle
• output (p, p’) as CH edge • p = p’
• until p = p0 //until it discovers first point again
Gift wrapping (1970)
p0
p
p’
Analysis
![Page 50: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/50.jpg)
• p0 = point with smallest x-coordinate (if more then one, pick right most) • p = p0 • repeat
• for each point q (q != p) • compute ccw-angle of q wrt p • let p’ = point with smallest angle
• output (p, p’) as CH edge • p = p’
• until p = p0
Gift wrapping (1970)
p0
p
p’
Analysis • for each vertex on the CH, it takes O(n) • overall O(kn), where k is the size of the CH(P)
![Page 51: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/51.jpg)
Gift wrapping (1970)
• Does the algorithm work on degenerate cases?
• Gift wrapping runs in O(kn) time, where k is the size of the CH(P)
• How small/large can k be for a set of n points?
• Show examples that trigger best/worst cases
• Discuss when gift-wrapping is a good choice
![Page 52: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/52.jpg)
Summary
• Gift wrapping • Runs in O(kn) time, where k is the size of the CH(P) • this is efficient if k is small • for k = O(n), gift wrapping takes O(n2) • Faster algorithms are known • Gift wrapping extends easily to 3D and for many years was the primary
algorithm for 3D
![Page 53: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/53.jpg)
Quickhull
![Page 54: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/54.jpg)
left most point
right most point
upper hull
lower hull
![Page 55: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/55.jpg)
Quickhull (late 1970s)
![Page 56: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/56.jpg)
Quickhull (late 1970s)
• Similar to Quicksort (in some way)
![Page 57: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/57.jpg)
Quickhull (late 1970s)
• Idea: start with 2 extreme points
ab
![Page 58: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/58.jpg)
Quickhull (late 1970s)
• CH consists of upper hull (CH of P1) and lower hull (CH of P2)
ab
P1
P2
![Page 59: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/59.jpg)
Quickhull (late 1970s)
• CH consists of upper hull (CH of P1) and lower hull (CH of P2)
ab
P1
P2
![Page 60: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/60.jpg)
Quickhull (late 1970s)
• CH consists of upper hull (CH of P1) and lower hull (CH of P2)
ab
P1
P2
![Page 61: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/61.jpg)
Quickhull (late 1970s)
• We’ll find the CH of P1 and CH of P2 separately
ab
P1
P2
![Page 62: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/62.jpg)
Quickhull (late 1970s)
• First let’s focus on P1
ab
P1
![Page 63: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/63.jpg)
Quickhull (late 1970s)
• For all points p in P1: compute dist(p, ab)
ab
![Page 64: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/64.jpg)
Quickhull (late 1970s)
• Find the point c with largest distance (i.e. furthest away from ab)
ab
c
![Page 65: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/65.jpg)
Quickhull (late 1970s)
• Claim: c must be an extreme point (and thus on the CH of P1) • Proof: ?
ab
c
![Page 66: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/66.jpg)
Quickhull (late 1970s)
• Claim: c must be an extreme point (and thus on the CH) • Proof: ?
ab
c let’s ignore collinear points for now
![Page 67: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/67.jpg)
Quickhull (late 1970s)
• Discard all points inside triangle abc
ab
c
![Page 68: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/68.jpg)
Quickhull (late 1970s)
• Discard all points inside triangle abc
ab
c
![Page 69: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/69.jpg)
Quickhull (late 1970s)
• Recurse on the points left of ac and right of bc
ab
c
![Page 70: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/70.jpg)
Quickhull (late 1970s)
ab
c
![Page 71: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/71.jpg)
Quickhull (late 1970s)
• Compute CH of P2 similarly
ab
c
![Page 72: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/72.jpg)
Quickhull (late 1970s)
• Quickhull (P)• find a, b • partition P into P1, P2 • return Quickhull(a,b, P1) + Quickhull(b,a,P2)
• Quickhull(a,b,P)//invariant: P is a set of points all on the left of ab • if P empty => return emptyset • for each point p in P: compute its distance to ab • let c = point with max distance • let P1 = points to the left of ac • let P2 = points to the left of cb • return Quickhull(a,c,P1) + c + Quickhull(c,b,P2)
ab
c
![Page 73: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/73.jpg)
• Analysis: • Write a recurrence relation for its running time • What is the best case running time? Show an example • What is the worst case running time ? Show an example
• More exercises: • Argue that Quickhull’s average complexity is O(n) on points that are uniformly
distributed.
ab
cQuickhull (late 1970s)
![Page 74: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/74.jpg)
Graham scan
![Page 75: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/75.jpg)
Graham scan (late 1960s)
• In late 60s an application at Bell Labs required the hull of 10,000 points, for which a quadratic algorithm was too slow
• Graham developed his simple algorithm which runs in O(n lg n) • one sort plus a linear pass
![Page 76: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/76.jpg)
points on the boundary are in radial order around p
![Page 77: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/77.jpg)
Graham scan (late 1960s)
![Page 78: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/78.jpg)
Graham scan (late 1960s)
• Idea: start from a point p interior to the hull
p
![Page 79: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/79.jpg)
p
Graham scan (late 1960s)
• Idea: start from a point p interior to the hull
order all points by their ccw angle wrt p
![Page 80: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/80.jpg)
Graham scan (late 1960s)
• Idea: start from a point p interior to the hull
order all points by their ccw angle wrt p
p
q
![Page 81: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/81.jpg)
Graham scan (late 1960s)
• Idea: start from a point p interior to the hull
order all points by their ccw angle wrt p
p
angleq = atan (q.y - p.y)/(q.x - p.x)
q
![Page 82: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/82.jpg)
Graham scan (late 1960s)
• Idea: traverse the points in this order a, b, c, d, e, f, g,…
p
abcd
e
f
g
h
ij
k
lm n
![Page 83: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/83.jpg)
Graham scan (late 1960s)
• Idea: traverse the points in this order a, b, c, d, e, f, g,… • initially we put a, b in S
p
abcd
e
f
g
h
ij
k
lm n
S = (b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 84: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/84.jpg)
Graham scan (late 1960s)
• Idea: traverse the points in this order a, b, c, d, e, f, g,… • initially we put a, b in S
p
abcd
e
f
g
h
ij
k
lm n
S = (b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 85: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/85.jpg)
Graham scan (late 1960s)
Now we read point c: what do we do with it?
p
abcd
e
f
g
h
ij
k
lm n
S = (b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 86: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/86.jpg)
Graham scan (late 1960s)
Now we read point c: what do we do with it?
p
abcd
e
f
g
h
ij
k
lm n
S = (b, a)
Invariant: we maintain S as the CH of
the points traversed so far
Is (c, b, a) convex?
![Page 87: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/87.jpg)
Graham scan (late 1960s)
Now we read point c: what do we do with it?
p
abcd
e
f
g
h
ij
k
lm n
S = (b, a)
Invariant: we maintain S as the CH of
the points traversed so far
Is (c, b, a) convex? YES!
![Page 88: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/88.jpg)
Graham scan (late 1960s)
Now we read point c: if (c+S) stays convex: add c to S
p
abcd
e
f
g
h
ij
k
lm n
S = (c, b, a)
Invariant: we maintain S as the CH of
the points traversed so far
Is (c, b, a) convex? YES!
![Page 89: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/89.jpg)
Graham scan
Now we read point c: if (c+S) stays convex : add c to S
p
abcd
e
f
g
h
ij
k
lm n
S = (c, b, a)
Invariant: we maintain S as the CH of
the points traversed so far
Is (c, b, a) convex? YES!
is c left of ab?
![Page 90: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/90.jpg)
Graham scan (late 1960s)
Now we read point d:
p
abcd
e
f
g
h
ij
k
lm n
S = (c, b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 91: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/91.jpg)
Graham scan (late 1960s)
Now we read point d: is d left of bc? NO
p
abcd
e
f
g
h
ij
k
lm n
S = (c, b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 92: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/92.jpg)
Graham scan (late 1960s)
Now we read point d: is d left of bc? NO
//can’t add d, because (d,c,b,a) not convex
p
abcd
e
f
g
h
ij
k
lm n
S = (d, c, b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 93: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/93.jpg)
Graham scan (late 1960s)
Now we read point d: is d left of bc? NO
p
abcd
e
f
g
h
ij
k
lm n
S = (c, b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 94: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/94.jpg)
Graham scan (late 1960s)
Now we read point d: is d left of bc? NO
pop c; is d left of ab?
p
abcd
e
f
g
h
ij
k
lm n
S = (b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 95: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/95.jpg)
Graham scan (late 1960s)
Now we read point d: is d left of bc? NO
pop c; is d left of ab?
p
abcd
e
f
g
h
ij
k
lm n
S = (b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 96: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/96.jpg)
Graham scan (late 1960s)
Now we read point d: is d left of bc? NO
pop c; is d left of ab? YES ==> insert d in S
p
abcd
e
f
g
h
ij
k
lm n
S = (d, b, a)
Invariant: we maintain S as the CH of
the points traversed so far
![Page 97: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/97.jpg)
Graham scan (late 1960s)
In general…
We read next point q: • let b = head(S), a = next(b) • if q is left of ab: add q to S
S = (b, a, ….) S = (q, b, a, ….)
p
b a
q
p
b a
qpush q
![Page 98: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/98.jpg)
Graham scan (late 1960s)
In general..
We read next point q: • let b = head(S), a = next(b) • if q is right of ab: pop b; repeat until q is left of ab, then add q to S
S = (b, a, ….) S = (q, a, ….)
p
b
aq
pop b push q
p
baq
![Page 99: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/99.jpg)
Graham scan (late 1960s)
Cascading pops
p
q
p
q
![Page 100: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/100.jpg)
Graham scan (late 1960s)
• Find interior point p0 • Sort all other points ccw around p0, and call them p1, p2, p3, …pn-1 in this
order • Initialize stack S = (p2, p1) • for i=3 to n-1 do
• if pi is left of (second(S),first(S)): • push pi on S
• else • do
• pop S • while pi is right of (second(S), first(S)) • push pi on S
![Page 101: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/101.jpg)
Graham scan (late 1960s)
• Choose a set of “interesting” points and go through the algorithm • Degenerate cases: does the algorithm handle degenerate cases? If not, how do
you fix it? • How to find an interior point? • Analysis: How long does it take?
![Page 102: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/102.jpg)
Graham scan: ANALYSIS
• Find interior point p0 • Sort all other points ccw around p0….. • Initialize stack S = (p2, p1) • for i=3 to n-1 do
• if pi is left of (second(S),first(S)): • push pi on S
• else • do
• pop S • while pi is right of (second(S), first(S)) • push pi on S
![Page 103: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/103.jpg)
Graham scan: ANALYSIS
• Find interior point p0 • Sort all other points ccw around p0….. • Initialize stack S = (p2, p1) • for i=3 to n-1 do
• if pi is left of (second(S),first(S)): • push pi on S
• else • do
• pop S • while pi is right of (second(S), first(S)) • push pi on S
O(n) (we’ll think of it later)
![Page 104: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/104.jpg)
Graham scan: ANALYSIS
• Find interior point p0 • Sort all other points ccw around p0….. • Initialize stack S = (p2, p1) • for i=3 to n-1 do
• if pi is left of (second(S),first(S)): • push pi on S
• else • do
• pop S • while pi is right of (second(S), first(S)) • push pi on S
O(n) (we’ll think of it later)
O(n lg n)
![Page 105: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/105.jpg)
Graham scan: ANALYSIS
• Find interior point p0 • Sort all other points ccw around p0….. • Initialize stack S = (p2, p1) • for i=3 to n-1 do
• if pi is left of (second(S),first(S)): • push pi on S
• else • do
• pop S • while pi is right of (second(S), first(S)) • push pi on S
O(n) (we’ll think of it later)
O(n lg n)
How long does this take?
![Page 106: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/106.jpg)
Graham scan: ANALYSIS
• Find interior point p0 • Sort all other points ccw around p0….. • Initialize stack S = (p2, p1) • for i=3 to n-1 do
• if pi is left of (second(S),first(S)): • push pi on S
• else • do
• pop S • while pi is right of (second(S), first(S)) • push pi on S
O(n) (we’ll think of it later)
O(n lg n)
How long does this take?
O(n)
every point is pushed once and popped at most once
![Page 107: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/107.jpg)
Graham scan: Details
• How to find an interior point?
![Page 108: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/108.jpg)
Graham scan: Details
• How to find an interior point? • A simplification is to pick p0 as the lowest point
![Page 109: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/109.jpg)
Graham scan: Details
• How to find an interior point? • A simplification is to pick p0 as the lowest point
• initialize stack S = (p1, p0)
//both are on CH and S will always contain at least 2 points
p0
p1
![Page 110: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/110.jpg)
Graham scan: Details
• Handling collinear-ities What happens when you run on this input?
How can you fix it?
![Page 111: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/111.jpg)
Speeding up Graham scan
![Page 112: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/112.jpg)
Speeding up Graham scan
![Page 113: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/113.jpg)
Speeding up Graham scan
![Page 114: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/114.jpg)
Speeding up Graham scan
![Page 115: cg-convexHull1 - Bowdoin CollegeTitle cg-convexHull1.key Created Date 4/21/2017 7:13:17 PM](https://reader035.vdocument.in/reader035/viewer/2022063018/5fdd7461f001f9350045f3b0/html5/thumbnails/115.jpg)
Speeding up Graham scan