Download presentation

Presentation is loading. Please wait.

1
**Computing Convex Hulls CLRS 33.3**

2
**Computational Geometry**

Studies algorithms for solving geometric problems Applications in many fields Computer graphics Robotics VLSI design Computer-aided design, etc.

3
Geometric algorithms The input (typically): a description of a set of geometric objects A set of points A set of line segments Vertices of a polygon Etc. We will look at sample problems in two dimensions, that is, in the plane

4
**Convex hulls in two dimensions**

What is a convex hull? What is convexity? A subset S of the plane is called convex if and only if for any pair of points p, q in S, the line segment pq is completely contained in S p q p q not convex convex

5
Convex Hull The convex hull CH(S) of a set s is the smallest convex set that contains S. Consider the problem of computing the convex hull of a finite set P of n points in the plane.

6
Convex Hull

7
Convex Hull

8
Convex Hull Alternative Definition: It is the unique convex polygon whose vertices are points from P and contains all the points of P

9
Problem Given P, compute a list of points that contains the vertices of CH(P), listed in clockwise (CW) order Expected output:

10
Brute-Force Solution Consider an edge of the convex hull between vertices p and q Consider the directed line passing through p and q Observe that CH(P) lies to the right of this line q p

11
**Brute-Force Solution Reverse holds too:**

If all points in lie to the right of the directed line through p and q, the pq is an edge of CH(P) q p

12
**BruteForce_ConvexHull(P) {**

E=empty set for all ordered pairs (p,q) in PxP, and p!= q do { isEdge = true for all points r in P, r!=p and r!=q do if r lies to the left of directed line from p to q isEdge= false if isEdge the add pq to E } from the set of edges in E, construct a list L of vertices of CH(P), in CW order return L

13
How to test? if r lies to the left of directed line from p to q

14
Orientation test Given an ordered triple of points <p,q,r> in the plane, we say that they have positive orientation if they define a CCW oriented triangle negative orientation if they define a CW oriented triangle Zero orientation if they are collinear p q r Positive orientation p q r r is to the left of pq

15
Orientation test Given an ordered triple of points <p,q,r> in the plane, we say that they have positive orientation if they define a CCW oriented triangle negative orientation if they define a CW oriented triangle Zero orientation if they are collinear q q r r p p negative orientation r is to the right of pq

16
Orientation test Given an ordered triple of points <p,q,r> in the plane, we say that they have positive orientation if they define a CCW oriented triangle negative orientation if they define a CW oriented triangle Zero orientation if they are collinear q q r r p p zero orientation r is on pq

17
Orientation

18
How about the last step? Given E, construct the list of vertices of CH(P) in CW order?

19
How about the last step? Given E, construct the list L of vertices of CH(P) in CW order? Remove an arbitrary edge pq from E, put p and q in L Now find in E the edge with origin q (say qr), remove that edge from E and add r to L Keep doing this until E has only one edge left time to contsruct L why?

20
**Overall, BruteForce takes How many ordered pairs?**

n (n-1) For each we compare n-2 other points (r)

21
Can we do better? A number of algorithms that can compute CH(P) in O(n log n) We will study the Incremental Algorithm Points are added one at a time and the hull is updated at each insertion

22
**Incremental Algorithm**

At any intermediate step of the algorithm There is a current hull of points Add point Update the hull Add points in order of increasing x-coordinate To guarantee that the new point is outside the current hull If same x-coordinate, then in increasing order of y

23
**Upper Hull and Lower Hull**

We will construct the hull in two pieces: construct upper hull from left to right construct lower hull from right to left

24
**Construction of the Upper Hull**

already processed

25
**Construction of the Upper Hull**

Observation: for a convex polygon, if we walk through the boundary in CW order, we always make a right turn i.e. if we consider any three consecutive points: p, q, r Orient(p,q,r) should be negative How can we use this?

26
**Construction of the Upper Hull**

Check whether the last two points on the current hull and make a right turn Left turn

27
**Construction of the Upper Hull**

If a left turn, remove the last point from the current hull and try again Left turn

28
**Construction of the Upper Hull**

If a left turn, remove the last point from the current hull and try again Left turn

29
**Construction of the Upper Hull**

If a left turn, remove the last point from the current hull and try again Left turn

30
**Construction of the Upper Hull**

If a right turn, add to the current hull right turn

31
**Construction of the Upper Hull**

If a right turn, add to the current hull right turn

32
**Store current hull on a stack U**

U.top() returns the last point on the current hull U.second() returns the second to last point on the current hull while ( Orient(U.second(), U.top() ) >= 0) U.push( ) U.pop()

33
**IncrementalConvexHull(P) {**

sort points in increasing order of their x-coordinate U.push(p[1]) U.push(p[2]) for i=3 to n do while U.size() >= 2 and orient(U.second(), U.top(), p[i]) >= 0) do U.pop() U.push(p[i]) L.push(p[n]) L.push(p[n-1]) for i=n-2 to 1 do while L.size() >= 2 and Orient(L.second(), L.top(), p[i]) >= 0) do L.pop() L.push(p[i]) Combine U and L into a single list of points in CW direction

34
**Incremental Convex Hull**

Running time? Sort: O(n log n) Each point is removed from the stack U at most once: O(n) Each point is entered into the stack U once: O(n) Thus, O(n) for upper hull Similarly O(n) for lower hull Total: O(n log n)

Similar presentations

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google