Convex Hulls

advertisement
Computational Geometry
Piyush Kumar
(Lecture 3: Convexity and Convex hulls)
Welcome to CIS5930
Convexity
A set S is convex if for any pair of points p,q  S we have pq  S.
p
p
q
convex
q
non-convex
Convex Hulls : Equivalent definitions
The intersection of all covex sets that
contains P
The intersection of all halfspaces that contains
P.
The union of all triangles determined by
points in P.
All convex combinations of points in P.
P here is a set of input points
Convex Hulls
Applications





Collision Detection
Fitting shapes
Shape Approximation
NN-Searching
Useful as a preprocessing step to many other
algorithms in computational geometry.
 The most ubiquitous structure in computational geometry.
Convex hulls
Extreme point
Int angle < pi
p6
p9
p12
p7
p11
p8
p5
p4
p2
p1
p0
Extreme edge
Supports the point set
Convex hull : Representation
We will represent the convex hull by an
enumeration of the vertices of the
CH(P) in counterclockwise order.
Naïve Algorithm to compute convex
hulls can be implemented in O(n3) in
the plane (How?)
Anyone with an O(n2) algorithm?
Convex hull
has a lower bound equivalent to sorting
has many similar algorithms to sorting.
We will see today






Graham Scan
Incremental (one point at a time)
D&C
Qhull ( similar to Quick Sort)
Jarvis March
Chan’s Algorithm
Assignments for next week
Notes of Dr. Mount: Lec 1-4, 6
Assignment2.cpp and ch_2.cpp
 Will talk more about it towards the end of
class.
Today (Jan 16th)
Line Segment intersection
Homeworks / Projects
Line Segment Intersection
Applications




VLSI (Intel uses it a lot)
Map Overlay
Clipping in Graphics
CSG
Problem : Given a set of line segments in the
plane, compute all the intersection point.
Line Segment Intersection : GIS
Cities, rivers, railroads and their overlay in western Canada.
Line Segment Intersection
Lower Bound from EU
EU : Given a list of n numbers, are all these
numbers unique? [Y / N]?
 Lower bound is Ω(nlogn)
 How do we use this fact to prove a Ω(nlogn) on
Line segment intersection problem?
 Does this imply a lower bound of Ω(nlogn+k)?
Tell me a naïve algorithm to solve this
problem.
Line Segment intersection
Naïve O(n^2)
Bentley Ottman sweep O((n+k)log n): 1979.
Edelsbrunner Chazelle 92
 O(nlogn +k) : Supercomplicated O(nlogn) space
Clarkson and Shor
 O(nlogn +k) Randmized O(n) space
Balaban : Deterministic O(nlogn + k) in O(n
space. Solved a long open problem.
Segment Intersection
How do we intersect two segments?
How do we implement such a
primitive? CG FAQ 1.3
Any special cases?
Do two segments intersect?
Intersection point?
Solve for s, t. Beware of degenerate cases.
Compute_intersection_point primitive is one of the most
time consuming parts of segment intersection algorithms.
For speed: Floating point filters on rational arithmetic is used.
Point inside Simplex?
Today ( Jan 20th)
Line Segment intersection Algorithm
Project discussion
Polygons
Line Segment intersection
Sweep line paradigm
 Main idea is to sweep the entire plane
with a line and compute what we
want to , as we sweep past the input.
Event scheduling and updates
 Carefully schedule the computation so
that it does not take too much time to
compute the output.
Line Segment Intersection
A Sorted sequence data structure




Insert
Delete
Successor/Predecessor
All in O(log n)
X-structure (or the event queue)
Y-structure (or the sweep line)
Plane Sweep Paradigm
Initialization:
 Add all segment endpoints to the X-structure or event queue (O(n
log n)).
 Sweep line status is empty.
Algorithm proceeds by inserting and deleting discrete events from the queue until it
is empty.
Plane Sweep
Pretend these never happened!
No line segment is vertical
If two segments intersect, then they
intersect in a single point (that is, they
are not collinear).
No three line segments intersect in a
common point.
Useful lemma
Given si,sj intersecting in p, there is a
placement of the sweepline prior to this
event such that si,sj are adjacent along
the sweepline.
Just before an intersection occurs, the two
relevant segments are adjacent to each other
in the sweep line status.
Proof of Lemma
Plane Sweep
Event A: Segment left endpoint
 Insert segment in sweep
line or the Y-structure.
 Test for intersection to the
right of the sweep line with
the segments immediately
above and below it. Insert
intersection points (if
found) into X-structure or
event queue.
Complexity: ? Worst case?
Plane Sweep : Left Endpoint
Plane Sweep – Algorithm
Event B: Segment right endpoint
 Delete segment from
sweep line status.
 Test for intersection to the
right of the sweep line
between the segments
immediately above and
below. (can you do any
optimization for this case?
) Insert point (if found)
into event queue.
Complexity: ?
Plane Sweet: Right endpoint
A simple optimization: Right endpoints
When s is deleted, p gets recomputed.
Avoid it using a hash?
Plane Sweep – Algorithm
Event C: Intersection point
 Report the point.
 Swap the two line relevant
segments in the sweep line
status.
 For the new upper segment –
test it against its predecessor
for an intersection. Insert
point (if found) into event
queue.
 Similar for new lower
segment (with successor).
Complexity: O(klogn)
Plane sweep : Degenerate cases.
The Simplified Algorithm
Construct the X-structure
scan thru the X-structure (or the event
queue) from left to right processing:
 Segment Left endpoint
 Segment right endpoint
 Intersection points
Handling Degeneracies
Polygon: Definition
In geometry a polygon is traditionally a plane figure that is bounded by a
closed path or circuit, composed of a finite sequence of straight line
segments (i.e., by a closed polygonal chain). These segments are called
its edges or sides, and the points where two edges meet are the polygon's
vertices or corners.
Point in polygon test?
Polygons
Point containment in simple polygon
Area of a simple polygon
Convex hull of a simple polygon
Triangulation of a simple polygon
Fast preprocessing of a convex polygon to
do in/out queries.
Area of a convex polygon
Area of a polygon
Area of a polygon
From a distance
Area of a polyon
Volume in higher dimensions
Volume in 3D
Convex hull of poygons
Melkman’s Algorithm.
Uses a deque: head-tail linked list, for
which elements can be added to or
removed from the front (head) or back
(tail).
Considered to be the best CH algorithm
for simple polygons.
Melkman’s algorithm
Start with CH of 3 vertices = Triangle
Partition plane in 4 colors
Points in the deque are circled in blue.
The point N is special point stored
separately.
F and B are front and back vertices of deque.
Partition plane in 4 colors
Next point on the polygon can only lie in the
colored regions.
Invariant : N followed by the vertices in the
deque (front to back) form a convex polygon.
Partition plane in 4 colors
If p falls into region I, push N onto the front
of the deque, then overwrite N by p. To
restore the invariant, backtrack/delete vertices
from the front of the deque until a convex
turn is encountered.
Partition plane in 4 colors
If p falls into region II, push N onto the back
of the deque, then overwrite N by p. Restore
the invariant by backtracking/deleting vertices
from the back of the deque until a convex turn
is encountered.
Partition plane in 4 colors
If p falls into region III, simply overwrite N by
p, and restore the invariants as in both cases I
and II.
Partition plane in 4 colors
If p falls into region IV , ignore this and all
following vertices until one emerges into
another region.
Melkman’s algorithm
An example of online algorithm:
meaning that points can be added in a
streaming fashion.
Very simple to code. Practical.
Implemented in CGAL.
Download