SlideShare a Scribd company logo
CONVEX HULLS
Chan's optimal output sensitive
algorithms for convex hulls
Alberto Parravicini
Université libre de Bruxelles
December 15, 2016
What's on the menu?
→ Basic notions
2
What's on the menu?
→ Basic notions
→ Algorithms for convex hulls
2
What's on the menu?
→ Basic notions
→ Algorithms for convex hulls
→ Optimal 2D algorithm
2
What's on the menu?
→ Basic notions
→ Algorithms for convex hulls
→ Optimal 2D algorithm
→ Optimal 3D algorithm
2
basic notions
Crash course on convex hulls
A convex set S is a set in which, ∀ x, y ∈ S, the
segment xy ⊆ S.
Given a set of points P in d dimensions, the
Convex Hull CH(P) of P is:
4
Crash course on convex hulls
A convex set S is a set in which, ∀ x, y ∈ S, the
segment xy ⊆ S.
Given a set of points P in d dimensions, the
Convex Hull CH(P) of P is:
→ the minimal convex set containing P.
4
Crash course on convex hulls
A convex set S is a set in which, ∀ x, y ∈ S, the
segment xy ⊆ S.
Given a set of points P in d dimensions, the
Convex Hull CH(P) of P is:
→ the minimal convex set containing P.
→ the union of all convex combinations of
points in P, i.e. the points CH(P) are s.t.
|P|
∑
i=1
wi · xi, ∀xi ∈ P, ∀wi : wi ≥ 0 and
|P|
∑
i=1
wi = 1
4
Output sensitive algorithm
The complexity of an output-sensitive
algorithm is a function of both the input size
and the output size.
5
algorithms for convex hulls
Jarvis's march
→ Core idea: given an edge pq of the convex
hull, the next edge qr to be added will
maximize the angle ∠∠∠pqr
7
Jarvis's march
→ Core idea: given an edge pq of the convex
hull, the next edge qr to be added will
maximize the angle ∠∠∠pqr
→ At each step we scan all the n points.
7
Jarvis's march
→ Core idea: given an edge pq of the convex
hull, the next edge qr to be added will
maximize the angle ∠∠∠pqr
→ At each step we scan all the n points.
→ How many steps? h, size of the hull.
7
Jarvis's march
→ Core idea: given an edge pq of the convex
hull, the next edge qr to be added will
maximize the angle ∠∠∠pqr
→ At each step we scan all the n points.
→ How many steps? h, size of the hull.
→ Complexity: O(nh)
7
One step, visually
Figure: A step of the Jarvis March. The red line is the next
segment that will be added to the hull.
8
Jarvis's march
Algorithm 1: Jarvis March
Input: a list S of bidimensional points.
Output: the convex hull of the set, sorted counterclockwise.
hull =[]
x0 = the leftmost point.
hull.push(x0)
Loop hull.last() != hull.first()
candidate = S.first()
foreach p in S do
if p != hull.last() and p is on the right of the segment
”hull.last(), candidate” then
candidate = p
if candidate != hull.first then hull.push(candidate) else break
return hull
9
Graham's scan
→ Sort the points in clockwise order around
the leftmost point - Cost: O(n log n)
10
Graham's scan
→ Sort the points in clockwise order around
the leftmost point - Cost: O(n log n)
→ Keep the current hull in a stack
H = {h0, . . . , hcurr}.
10
Graham's scan
→ Sort the points in clockwise order around
the leftmost point - Cost: O(n log n)
→ Keep the current hull in a stack
H = {h0, . . . , hcurr}.
→ Inspect each point p in order - Cost: O(n)
10
Graham's scan
→ Sort the points in clockwise order around
the leftmost point - Cost: O(n log n)
→ Keep the current hull in a stack
H = {h0, . . . , hcurr}.
→ Inspect each point p in order - Cost: O(n)
→ While hcurr−1hcurrp is a right turn, pop hcurr.
10
Graham's scan
→ Sort the points in clockwise order around
the leftmost point - Cost: O(n log n)
→ Keep the current hull in a stack
H = {h0, . . . , hcurr}.
→ Inspect each point p in order - Cost: O(n)
→ While hcurr−1hcurrp is a right turn, pop hcurr.
→ Push p to H.
10
Graham's scan
→ Sort the points in clockwise order around
the leftmost point - Cost: O(n log n)
→ Keep the current hull in a stack
H = {h0, . . . , hcurr}.
→ Inspect each point p in order - Cost: O(n)
→ While hcurr−1hcurrp is a right turn, pop hcurr.
→ Push p to H.
→ Overall complexity: O(n log n)
10
Graham's scan
Algorithm 2: Graham Scan
Input: a list S of bidimensional points.
Output: the convex hull of the set, sorted counterclockwise.
hull =[]
x0 = the leftmost point.
Put x0 as the first element of S.
Sort the remaining points in counter-clockwise order, with
respect to x0.
Add the first 3 points in S to the hull.
forall the remaining points in S do
while hull.second_to_last(), hull.last(), p form a right turn do
hull.pop()
hull.push(p)
return hull
11
Can we do better?
So far:
12
Can we do better?
So far:
→ Jarvis’s march: O(nh)
12
Can we do better?
So far:
→ Jarvis’s march: O(nh)
→ Graham’s scan: O(n log n)
12
Can we do better?
So far:
→ Jarvis’s march: O(nh)
→ Graham’s scan: O(n log n)
→ How do we compare their complexity?
12
Can we do better?
So far:
→ Jarvis’s march: O(nh)
→ Graham’s scan: O(n log n)
→ How do we compare their complexity?
→ We would like to do even better!
12
Can we do better?
So far:
→ Jarvis’s march: O(nh)
→ Graham’s scan: O(n log n)
→ How do we compare their complexity?
→ We would like to do even better!
Can we get to O(n log h)?
12
chan's 2d algorithm
Chan's 2D algorithm
→ Idea: Some points will never be in the hull!
Discard them to speed up Jarvis’s march.
14
Chan's 2D algorithm
→ Idea: Some points will never be in the hull!
Discard them to speed up Jarvis’s march.
→ Combine Jarvis’s march and Graham’s scan.
14
Chan's 2D algorithm
→ Idea: Some points will never be in the hull!
Discard them to speed up Jarvis’s march.
→ Combine Jarvis’s march and Graham’s scan.
→ Algorithm (Chan 2D):
→ Split the n points in groups of size m
(⌈n/m⌉ groups).
14
Chan's 2D algorithm
→ Idea: Some points will never be in the hull!
Discard them to speed up Jarvis’s march.
→ Combine Jarvis’s march and Graham’s scan.
→ Algorithm (Chan 2D):
→ Split the n points in groups of size m
(⌈n/m⌉ groups).
→ Compute the hull Hi of each group
Cost: O((n/m) · (m log m)) = O(n log m)
14
Chan's 2D algorithm
→ Idea: Some points will never be in the hull!
Discard them to speed up Jarvis’s march.
→ Combine Jarvis’s march and Graham’s scan.
→ Algorithm (Chan 2D):
→ Split the n points in groups of size m
(⌈n/m⌉ groups).
→ Compute the hull Hi of each group
Cost: O((n/m) · (m log m)) = O(n log m)
→ Until the hull is complete, repeat:
14
Chan's 2D algorithm
→ Idea: Some points will never be in the hull!
Discard them to speed up Jarvis’s march.
→ Combine Jarvis’s march and Graham’s scan.
→ Algorithm (Chan 2D):
→ Split the n points in groups of size m
(⌈n/m⌉ groups).
→ Compute the hull Hi of each group
Cost: O((n/m) · (m log m)) = O(n log m)
→ Until the hull is complete, repeat:
→ Given the current hull Htot = {h0, . . . , hcurr},
find for each Hi the point right tangent to
hcurr (binary search, O(log m)⌈n/m⌉).
14
Chan's 2D algorithm
→ Idea: Some points will never be in the hull!
Discard them to speed up Jarvis’s march.
→ Combine Jarvis’s march and Graham’s scan.
→ Algorithm (Chan 2D):
→ Split the n points in groups of size m
(⌈n/m⌉ groups).
→ Compute the hull Hi of each group
Cost: O((n/m) · (m log m)) = O(n log m)
→ Until the hull is complete, repeat:
→ Given the current hull Htot = {h0, . . . , hcurr},
find for each Hi the point right tangent to
hcurr (binary search, O(log m)⌈n/m⌉).
→ Pick the tangent point p that maximizes
∠hcurr−1hcurrp.
14
One step, visually
Figure: A step of Chan’s algorithm. In blue, the existing
hull, in orange, the tangents, in red, the new edge that
will be added.
15
Chan's 2D algorithm, part 2
Complexity: O(n log m + (h(n/m)log m))
16
Chan's 2D algorithm, part 2
Complexity: O(n log m + (h(n/m)log m))
What about m? Let’s pretend the size h of
the final hull is know.
16
Chan's 2D algorithm, part 2
Complexity: O(n log m + (h(n/m)log m))
What about m? Let’s pretend the size h of
the final hull is know.
With m = h, we get complexity
O(n log h + (h(n/h)log h)) = O(n log h)
16
Chan's 2D algorithm, part 2
Complexity: O(n log m + (h(n/m)log m))
What about m? Let’s pretend the size h of
the final hull is know.
With m = h, we get complexity
O(n log h + (h(n/h)log h)) = O(n log h)
But h is not known!
16
Chan's 2D algorithm, part 2
Complexity: O(n log m + (h(n/m)log m))
What about m? Let’s pretend the size h of
the final hull is know.
With m = h, we get complexity
O(n log h + (h(n/h)log h)) = O(n log h)
But h is not known!
→ Reiterate the algorithm, with m = 22i
16
Chan's 2D algorithm, part 2
Complexity: O(n log m + (h(n/m)log m))
What about m? Let’s pretend the size h of
the final hull is know.
With m = h, we get complexity
O(n log h + (h(n/h)log h)) = O(n log h)
But h is not known!
→ Reiterate the algorithm, with m = 22i
→ Iteration cost: O(n log H) = O(n2i
)
16
Chan's 2D algorithm, part 2
Complexity: O(n log m + (h(n/m)log m))
What about m? Let’s pretend the size h of
the final hull is know.
With m = h, we get complexity
O(n log h + (h(n/h)log h)) = O(n log h)
But h is not known!
→ Reiterate the algorithm, with m = 22i
→ Iteration cost: O(n log H) = O(n2i
)
→ O
(∑⌈log log h⌉
i=1 n2i
)
= O(n2⌈log log h⌉+1
) = O(n log h)
16
Chan's 2D pseudo-code
Algorithm 3: ChanHullStep, a step of Chan’s
algorithm
Input: a list S of bidimensional points, the parameters m, H
Output: the convex hull of the set, sorted counterclockwise, or an empty list, if H
is < h
Partition S into subsets S1, . . . , S⌈n/m⌉.
for i = 1, . . . , ⌈n/m⌉ do
Compute the convex hull of Si by using Graham Scan, store the output in a
counter-clockwise sorted list.
p0 = (0, −∞)
p1 = the leftmost point of S.
for k = 1, . . . , H do
for i = 1, . . . , ⌈n/m⌉ do
Compute the points qi ∈ S that maximizes ∠pk−1pkqi, with qi ̸= pk, by
performing binary search on the vertices of the partial hull Si.
pk+1 = the point q ∈ {q1, . . . , q⌈n/m⌉}.
if pk+1 = pt then return {p1, . . . , pk}
return incomplete
17
Chan's 2D pseudo-code, reprise
Algorithm 4: Chan’s algorithm
Input: a list S of bidimensional points
Output: the convex hull of the set
for i = 1, 2, . . . do
L = ChanHullStep(S, m, H), where m = H = min{|S|, 22i
}
if L ̸= incomplete then return L
18
Chan's 2D - Empirical analysis
Is a real implementation O(n log h)?
Test 1: fixed hull size (1000), increasing number of
points.
0
10
20
30
40
50
50000
100000
150000
200000
Number of Points
Executiontime[sec]
Linear Model Real Data
19
Chan's 2D - Empirical analysis
Is a real implementation O(n log h)?
Test 2: fixed number of points (40000), increasing
hull size.
8
9
10
11 5000
10000
15000
20000
Size of the Hull
Executiontime[sec]
Logarithmic Model Real Data
20
chan's 3d algorithm
Chan's 3D algorithm
→ Idea: The structure of the algorithm doesn’t
change, just the ingredients.
22
Chan's 3D algorithm
→ Idea: The structure of the algorithm doesn’t
change, just the ingredients.
Given a set S of n points with an hull of size h:
22
Chan's 3D algorithm
→ Idea: The structure of the algorithm doesn’t
change, just the ingredients.
Given a set S of n points with an hull of size h:
→ Jarvis's march −→ Chand and Kapur's gift
wrapping - O(nh).
22
Chan's 3D algorithm
→ Idea: The structure of the algorithm doesn’t
change, just the ingredients.
Given a set S of n points with an hull of size h:
→ Jarvis's march −→ Chand and Kapur's gift
wrapping - O(nh).
→ Graham's scan −→ Preparata and Hong 3D
Algorithm - O(n log n).
22
Chan's 3D algorithm
→ Idea: The structure of the algorithm doesn’t
change, just the ingredients.
Given a set S of n points with an hull of size h:
→ Jarvis's march −→ Chand and Kapur's gift
wrapping - O(nh).
→ Graham's scan −→ Preparata and Hong 3D
Algorithm - O(n log n).
→ Finding tangents in 2D −→ Supporting planes
in 3D with Dobkin-Kirkpatrick hierarchy -
O(log n).
22
Chan's 3D algorithm
→ Idea: The structure of the algorithm doesn’t
change, just the ingredients.
Given a set S of n points with an hull of size h:
→ Jarvis's march −→ Chand and Kapur's gift
wrapping - O(nh).
→ Graham's scan −→ Preparata and Hong 3D
Algorithm - O(n log n).
→ Finding tangents in 2D −→ Supporting planes
in 3D with Dobkin-Kirkpatrick hierarchy -
O(log n).
The overall complexity is still O(n log h).
22
Chan's 3D algorithm
→ 3D Gift wrapping
23
Chan's 3D algorithm
→ 3D Gift wrapping
→ Pick an edge ej of a face f of the partial hull.
23
Chan's 3D algorithm
→ 3D Gift wrapping
→ Pick an edge ej of a face f of the partial hull.
→ Find p that maximizes the angle between f and
the new face given by ej and p. Repeat for the 3
edges of f.
23
Chan's 3D algorithm
→ 3D Gift wrapping
→ Pick an edge ej of a face f of the partial hull.
→ Find p that maximizes the angle between f and
the new face given by ej and p. Repeat for the 3
edges of f.
→ Use breadth first visit to build the entire hull.
23
Chan's 3D algorithm
→ 3D Gift wrapping
→ Pick an edge ej of a face f of the partial hull.
→ Find p that maximizes the angle between f and
the new face given by ej and p. Repeat for the 3
edges of f.
→ Use breadth first visit to build the entire hull.
→ Preparata and Hong 3D algorithm, a
divide-and-conquer algorithm for convex
hulls
23
Chan's 3D algorithm
→ 3D Gift wrapping
→ Pick an edge ej of a face f of the partial hull.
→ Find p that maximizes the angle between f and
the new face given by ej and p. Repeat for the 3
edges of f.
→ Use breadth first visit to build the entire hull.
→ Preparata and Hong 3D algorithm, a
divide-and-conquer algorithm for convex
hulls
→ Split the set of points S in S1 and S2.
23
Chan's 3D algorithm
→ 3D Gift wrapping
→ Pick an edge ej of a face f of the partial hull.
→ Find p that maximizes the angle between f and
the new face given by ej and p. Repeat for the 3
edges of f.
→ Use breadth first visit to build the entire hull.
→ Preparata and Hong 3D algorithm, a
divide-and-conquer algorithm for convex
hulls
→ Split the set of points S in S1 and S2.
→ Recursively split until the base case, then build
the convex hull.
23
Chan's 3D algorithm
→ 3D Gift wrapping
→ Pick an edge ej of a face f of the partial hull.
→ Find p that maximizes the angle between f and
the new face given by ej and p. Repeat for the 3
edges of f.
→ Use breadth first visit to build the entire hull.
→ Preparata and Hong 3D algorithm, a
divide-and-conquer algorithm for convex
hulls
→ Split the set of points S in S1 and S2.
→ Recursively split until the base case, then build
the convex hull.
→ Merge the partial hulls.
23
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
→ Build Pi+1 from Pi by picking a maximal set of
independent vertices of Pi.
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
→ Build Pi+1 from Pi by picking a maximal set of
independent vertices of Pi.
→ Overall, building the hierarchies takes O(n).
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
→ Build Pi+1 from Pi by picking a maximal set of
independent vertices of Pi.
→ Overall, building the hierarchies takes O(n).
→ Finding supporting planes in 3D
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
→ Build Pi+1 from Pi by picking a maximal set of
independent vertices of Pi.
→ Overall, building the hierarchies takes O(n).
→ Finding supporting planes in 3D
→ Goal: given an edge ej and the DK hierarchy of a
partial hull Hi, find the plane passing through ej
and tangent to Hi in pt.
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
→ Build Pi+1 from Pi by picking a maximal set of
independent vertices of Pi.
→ Overall, building the hierarchies takes O(n).
→ Finding supporting planes in 3D
→ Goal: given an edge ej and the DK hierarchy of a
partial hull Hi, find the plane passing through ej
and tangent to Hi in pt.
→ Find pt in constant time in Pk
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
→ Build Pi+1 from Pi by picking a maximal set of
independent vertices of Pi.
→ Overall, building the hierarchies takes O(n).
→ Finding supporting planes in 3D
→ Goal: given an edge ej and the DK hierarchy of a
partial hull Hi, find the plane passing through ej
and tangent to Hi in pt.
→ Find pt in constant time in Pk
→ Step up in the hierarchy: if pt changes, it will
move to a neighbour (constant time check).
24
Chan's 3D algorithm
→ To find supporting planes, store each partial
hull as a Dobkin-Kirkpatrick hierarchy
→ Sequence P0, . . . , Pk of increasingly smaller
approximations of a polyhedron P = P0.
→ Build Pi+1 from Pi by picking a maximal set of
independent vertices of Pi.
→ Overall, building the hierarchies takes O(n).
→ Finding supporting planes in 3D
→ Goal: given an edge ej and the DK hierarchy of a
partial hull Hi, find the plane passing through ej
and tangent to Hi in pt.
→ Find pt in constant time in Pk
→ Step up in the hierarchy: if pt changes, it will
move to a neighbour (constant time check).
→ The DK hierarchy has O(log m) height.
24
THANK YOU!
References I
[1] C. Bradford Barber, David P. Dobkin, and Huhdanpaa Hannu.
The quickhull algorithm for convex hulls.
1995.
[2] T. M. Chan.
Optimal output-sensitive convex hull algorithms in two and three
dimensions.
Discrete & Computational Geometry, 16(4):361–368, 1996.
[3] Donald R. Chand and Sham S. Kapur.
[4] Ioannis Z. Emiris and John F. Canny.
An efficient approach to removing geometric degeneracies.
Technical report, 1991.
[5] Christer Ericson.
Real-Time Collision Detection.
CRC Press, Inc., Boca Raton, FL, USA, 2004.
[6] A. Goshtasby and G. C. Stockman.
Point pattern matching using convex hull edges.
IEEE Transactions on Systems, Man, and Cybernetics, SMC-15(5), 1985.
26
References II
[7] David G. Kirkpatrick and Raimund Seidel.
The ultimate planar convex hull algorithm ?
Technical report, 1983.
[8] Joseph O’Rourke.
Computational Geometry in C.
Cambridge University Press, 2nd edition, 1998.
[9] F. P. Preparata and S. J. Hong.
Convex hulls of finite sets of points in two and three dimensions.
Commun. ACM, 20(2):87–93, February 1977.
[10] Franco P. Preparata and Michael I. Shamos.
Computational Geometry: An Introduction.
Springer-Verlag New York, Inc., 1985.
[11] Franco P. Preparata and Michael I. Shamos.
Computational Geometry: An Introduction.
Springer-Verlag New York, Inc., 1985.
Beamer theme: Presento, by Ratul Saha. The research system in Germany, by
Hazem Alsaied
27

More Related Content

PPTX
Convex Hull Algorithms
PPTX
convex hull
PDF
Convex hull
PPTX
strassen matrix multiplication algorithm
PPTX
Lecture 14 Heuristic Search-A star algorithm
PPTX
Evaluation of prefix expression with example
PPTX
Prim's algorithm
PPT
Asymptotic notations
Convex Hull Algorithms
convex hull
Convex hull
strassen matrix multiplication algorithm
Lecture 14 Heuristic Search-A star algorithm
Evaluation of prefix expression with example
Prim's algorithm
Asymptotic notations

What's hot (20)

PPT
K mean-clustering algorithm
PPTX
A* algorithm
PPTX
10.m way search tree
PPTX
Merge sort algorithm
PDF
Temporal difference learning
PPTX
Certinity Factor and Dempster-shafer theory .pptx
PPTX
Automata theory - NFA ε to DFA Conversion
PDF
Minimum spanning tree
PPT
Regular Grammar
PPTX
Polynomial reppresentation using Linkedlist-Application of LL.pptx
PPTX
Fractional Knapsack Problem
PDF
AI3391 ARTIFICIAL INTELLIGENCE UNIT II notes.pdf
PPT
Branch & bound
PPT
01 knapsack using backtracking
PPT
Graph algorithm
PPT
Time complexity
PPTX
01 Knapsack using Dynamic Programming
PPTX
Non- Deterministic Algorithms
K mean-clustering algorithm
A* algorithm
10.m way search tree
Merge sort algorithm
Temporal difference learning
Certinity Factor and Dempster-shafer theory .pptx
Automata theory - NFA ε to DFA Conversion
Minimum spanning tree
Regular Grammar
Polynomial reppresentation using Linkedlist-Application of LL.pptx
Fractional Knapsack Problem
AI3391 ARTIFICIAL INTELLIGENCE UNIT II notes.pdf
Branch & bound
01 knapsack using backtracking
Graph algorithm
Time complexity
01 Knapsack using Dynamic Programming
Non- Deterministic Algorithms
Ad

Viewers also liked (8)

PPTX
Convex Hull - Chan's Algorithm O(n log h) - Presentation by Yitian Huang and ...
PDF
Convex Hull Algorithm Analysis
PPTX
An Efficient Convex Hull Algorithm for a Planer Set of Points
PPTX
convex hull
PPT
project presentation on mouse simulation using finger tip detection
PPT
morphological image processing
PPTX
Hand gesture recognition
PPTX
Gesture recognition
Convex Hull - Chan's Algorithm O(n log h) - Presentation by Yitian Huang and ...
Convex Hull Algorithm Analysis
An Efficient Convex Hull Algorithm for a Planer Set of Points
convex hull
project presentation on mouse simulation using finger tip detection
morphological image processing
Hand gesture recognition
Gesture recognition
Ad

Similar to Convex hulls & Chan's algorithm (20)

PDF
Unit ii divide and conquer -4
PPT
Mba admission in india
PDF
Convex hull in 3D
PPT
Discrete Computaional Geometry
PDF
20 convex hull last 7
PPT
Lec12
PPT
convexHullsconvexHullsconvexHullsconvexHullsconvexHullsconvexHullsconvexHulls
PPTX
Analysis and Enhancement of Algorithms in Computational Geometry
PPT
5.2 divede and conquer 03
PPT
5.2 divede and conquer 03
PDF
A New Approach to Output-Sensitive Voronoi Diagrams and Delaunay Triangulations
PPT
A Tutorial on Computational Geometry
PPT
ConvexHulls geometria computacional algoritmo convexo
PDF
Output-Sensitive Voronoi Diagrams and Delaunay Triangulations
PPTX
Parallel Algorithms for Geometric Graph Problems (at Stanford)
DOCX
Csc 440 assignment 2 convex hull out tuesday, feb 9th
PDF
Data structures
PDF
Building graphs to discover information by David Martínez at Big Data Spain 2015
Unit ii divide and conquer -4
Mba admission in india
Convex hull in 3D
Discrete Computaional Geometry
20 convex hull last 7
Lec12
convexHullsconvexHullsconvexHullsconvexHullsconvexHullsconvexHullsconvexHulls
Analysis and Enhancement of Algorithms in Computational Geometry
5.2 divede and conquer 03
5.2 divede and conquer 03
A New Approach to Output-Sensitive Voronoi Diagrams and Delaunay Triangulations
A Tutorial on Computational Geometry
ConvexHulls geometria computacional algoritmo convexo
Output-Sensitive Voronoi Diagrams and Delaunay Triangulations
Parallel Algorithms for Geometric Graph Problems (at Stanford)
Csc 440 assignment 2 convex hull out tuesday, feb 9th
Data structures
Building graphs to discover information by David Martínez at Big Data Spain 2015

Recently uploaded (20)

PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
history of c programming in notes for students .pptx
PPTX
ai tools demonstartion for schools and inter college
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PPT
Introduction Database Management System for Course Database
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Designing Intelligence for the Shop Floor.pdf
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PPTX
L1 - Introduction to python Backend.pptx
PDF
top salesforce developer skills in 2025.pdf
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Digital Systems & Binary Numbers (comprehensive )
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
history of c programming in notes for students .pptx
ai tools demonstartion for schools and inter college
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Internet Downloader Manager (IDM) Crack 6.42 Build 41
2025 Textile ERP Trends: SAP, Odoo & Oracle
Introduction Database Management System for Course Database
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Designing Intelligence for the Shop Floor.pdf
Design an Analysis of Algorithms I-SECS-1021-03
How to Choose the Right IT Partner for Your Business in Malaysia
L1 - Introduction to python Backend.pptx
top salesforce developer skills in 2025.pdf
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Design an Analysis of Algorithms II-SECS-1021-03
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Digital Systems & Binary Numbers (comprehensive )

Convex hulls & Chan's algorithm

  • 1. CONVEX HULLS Chan's optimal output sensitive algorithms for convex hulls Alberto Parravicini Université libre de Bruxelles December 15, 2016
  • 2. What's on the menu? → Basic notions 2
  • 3. What's on the menu? → Basic notions → Algorithms for convex hulls 2
  • 4. What's on the menu? → Basic notions → Algorithms for convex hulls → Optimal 2D algorithm 2
  • 5. What's on the menu? → Basic notions → Algorithms for convex hulls → Optimal 2D algorithm → Optimal 3D algorithm 2
  • 7. Crash course on convex hulls A convex set S is a set in which, ∀ x, y ∈ S, the segment xy ⊆ S. Given a set of points P in d dimensions, the Convex Hull CH(P) of P is: 4
  • 8. Crash course on convex hulls A convex set S is a set in which, ∀ x, y ∈ S, the segment xy ⊆ S. Given a set of points P in d dimensions, the Convex Hull CH(P) of P is: → the minimal convex set containing P. 4
  • 9. Crash course on convex hulls A convex set S is a set in which, ∀ x, y ∈ S, the segment xy ⊆ S. Given a set of points P in d dimensions, the Convex Hull CH(P) of P is: → the minimal convex set containing P. → the union of all convex combinations of points in P, i.e. the points CH(P) are s.t. |P| ∑ i=1 wi · xi, ∀xi ∈ P, ∀wi : wi ≥ 0 and |P| ∑ i=1 wi = 1 4
  • 10. Output sensitive algorithm The complexity of an output-sensitive algorithm is a function of both the input size and the output size. 5
  • 12. Jarvis's march → Core idea: given an edge pq of the convex hull, the next edge qr to be added will maximize the angle ∠∠∠pqr 7
  • 13. Jarvis's march → Core idea: given an edge pq of the convex hull, the next edge qr to be added will maximize the angle ∠∠∠pqr → At each step we scan all the n points. 7
  • 14. Jarvis's march → Core idea: given an edge pq of the convex hull, the next edge qr to be added will maximize the angle ∠∠∠pqr → At each step we scan all the n points. → How many steps? h, size of the hull. 7
  • 15. Jarvis's march → Core idea: given an edge pq of the convex hull, the next edge qr to be added will maximize the angle ∠∠∠pqr → At each step we scan all the n points. → How many steps? h, size of the hull. → Complexity: O(nh) 7
  • 16. One step, visually Figure: A step of the Jarvis March. The red line is the next segment that will be added to the hull. 8
  • 17. Jarvis's march Algorithm 1: Jarvis March Input: a list S of bidimensional points. Output: the convex hull of the set, sorted counterclockwise. hull =[] x0 = the leftmost point. hull.push(x0) Loop hull.last() != hull.first() candidate = S.first() foreach p in S do if p != hull.last() and p is on the right of the segment ”hull.last(), candidate” then candidate = p if candidate != hull.first then hull.push(candidate) else break return hull 9
  • 18. Graham's scan → Sort the points in clockwise order around the leftmost point - Cost: O(n log n) 10
  • 19. Graham's scan → Sort the points in clockwise order around the leftmost point - Cost: O(n log n) → Keep the current hull in a stack H = {h0, . . . , hcurr}. 10
  • 20. Graham's scan → Sort the points in clockwise order around the leftmost point - Cost: O(n log n) → Keep the current hull in a stack H = {h0, . . . , hcurr}. → Inspect each point p in order - Cost: O(n) 10
  • 21. Graham's scan → Sort the points in clockwise order around the leftmost point - Cost: O(n log n) → Keep the current hull in a stack H = {h0, . . . , hcurr}. → Inspect each point p in order - Cost: O(n) → While hcurr−1hcurrp is a right turn, pop hcurr. 10
  • 22. Graham's scan → Sort the points in clockwise order around the leftmost point - Cost: O(n log n) → Keep the current hull in a stack H = {h0, . . . , hcurr}. → Inspect each point p in order - Cost: O(n) → While hcurr−1hcurrp is a right turn, pop hcurr. → Push p to H. 10
  • 23. Graham's scan → Sort the points in clockwise order around the leftmost point - Cost: O(n log n) → Keep the current hull in a stack H = {h0, . . . , hcurr}. → Inspect each point p in order - Cost: O(n) → While hcurr−1hcurrp is a right turn, pop hcurr. → Push p to H. → Overall complexity: O(n log n) 10
  • 24. Graham's scan Algorithm 2: Graham Scan Input: a list S of bidimensional points. Output: the convex hull of the set, sorted counterclockwise. hull =[] x0 = the leftmost point. Put x0 as the first element of S. Sort the remaining points in counter-clockwise order, with respect to x0. Add the first 3 points in S to the hull. forall the remaining points in S do while hull.second_to_last(), hull.last(), p form a right turn do hull.pop() hull.push(p) return hull 11
  • 25. Can we do better? So far: 12
  • 26. Can we do better? So far: → Jarvis’s march: O(nh) 12
  • 27. Can we do better? So far: → Jarvis’s march: O(nh) → Graham’s scan: O(n log n) 12
  • 28. Can we do better? So far: → Jarvis’s march: O(nh) → Graham’s scan: O(n log n) → How do we compare their complexity? 12
  • 29. Can we do better? So far: → Jarvis’s march: O(nh) → Graham’s scan: O(n log n) → How do we compare their complexity? → We would like to do even better! 12
  • 30. Can we do better? So far: → Jarvis’s march: O(nh) → Graham’s scan: O(n log n) → How do we compare their complexity? → We would like to do even better! Can we get to O(n log h)? 12
  • 32. Chan's 2D algorithm → Idea: Some points will never be in the hull! Discard them to speed up Jarvis’s march. 14
  • 33. Chan's 2D algorithm → Idea: Some points will never be in the hull! Discard them to speed up Jarvis’s march. → Combine Jarvis’s march and Graham’s scan. 14
  • 34. Chan's 2D algorithm → Idea: Some points will never be in the hull! Discard them to speed up Jarvis’s march. → Combine Jarvis’s march and Graham’s scan. → Algorithm (Chan 2D): → Split the n points in groups of size m (⌈n/m⌉ groups). 14
  • 35. Chan's 2D algorithm → Idea: Some points will never be in the hull! Discard them to speed up Jarvis’s march. → Combine Jarvis’s march and Graham’s scan. → Algorithm (Chan 2D): → Split the n points in groups of size m (⌈n/m⌉ groups). → Compute the hull Hi of each group Cost: O((n/m) · (m log m)) = O(n log m) 14
  • 36. Chan's 2D algorithm → Idea: Some points will never be in the hull! Discard them to speed up Jarvis’s march. → Combine Jarvis’s march and Graham’s scan. → Algorithm (Chan 2D): → Split the n points in groups of size m (⌈n/m⌉ groups). → Compute the hull Hi of each group Cost: O((n/m) · (m log m)) = O(n log m) → Until the hull is complete, repeat: 14
  • 37. Chan's 2D algorithm → Idea: Some points will never be in the hull! Discard them to speed up Jarvis’s march. → Combine Jarvis’s march and Graham’s scan. → Algorithm (Chan 2D): → Split the n points in groups of size m (⌈n/m⌉ groups). → Compute the hull Hi of each group Cost: O((n/m) · (m log m)) = O(n log m) → Until the hull is complete, repeat: → Given the current hull Htot = {h0, . . . , hcurr}, find for each Hi the point right tangent to hcurr (binary search, O(log m)⌈n/m⌉). 14
  • 38. Chan's 2D algorithm → Idea: Some points will never be in the hull! Discard them to speed up Jarvis’s march. → Combine Jarvis’s march and Graham’s scan. → Algorithm (Chan 2D): → Split the n points in groups of size m (⌈n/m⌉ groups). → Compute the hull Hi of each group Cost: O((n/m) · (m log m)) = O(n log m) → Until the hull is complete, repeat: → Given the current hull Htot = {h0, . . . , hcurr}, find for each Hi the point right tangent to hcurr (binary search, O(log m)⌈n/m⌉). → Pick the tangent point p that maximizes ∠hcurr−1hcurrp. 14
  • 39. One step, visually Figure: A step of Chan’s algorithm. In blue, the existing hull, in orange, the tangents, in red, the new edge that will be added. 15
  • 40. Chan's 2D algorithm, part 2 Complexity: O(n log m + (h(n/m)log m)) 16
  • 41. Chan's 2D algorithm, part 2 Complexity: O(n log m + (h(n/m)log m)) What about m? Let’s pretend the size h of the final hull is know. 16
  • 42. Chan's 2D algorithm, part 2 Complexity: O(n log m + (h(n/m)log m)) What about m? Let’s pretend the size h of the final hull is know. With m = h, we get complexity O(n log h + (h(n/h)log h)) = O(n log h) 16
  • 43. Chan's 2D algorithm, part 2 Complexity: O(n log m + (h(n/m)log m)) What about m? Let’s pretend the size h of the final hull is know. With m = h, we get complexity O(n log h + (h(n/h)log h)) = O(n log h) But h is not known! 16
  • 44. Chan's 2D algorithm, part 2 Complexity: O(n log m + (h(n/m)log m)) What about m? Let’s pretend the size h of the final hull is know. With m = h, we get complexity O(n log h + (h(n/h)log h)) = O(n log h) But h is not known! → Reiterate the algorithm, with m = 22i 16
  • 45. Chan's 2D algorithm, part 2 Complexity: O(n log m + (h(n/m)log m)) What about m? Let’s pretend the size h of the final hull is know. With m = h, we get complexity O(n log h + (h(n/h)log h)) = O(n log h) But h is not known! → Reiterate the algorithm, with m = 22i → Iteration cost: O(n log H) = O(n2i ) 16
  • 46. Chan's 2D algorithm, part 2 Complexity: O(n log m + (h(n/m)log m)) What about m? Let’s pretend the size h of the final hull is know. With m = h, we get complexity O(n log h + (h(n/h)log h)) = O(n log h) But h is not known! → Reiterate the algorithm, with m = 22i → Iteration cost: O(n log H) = O(n2i ) → O (∑⌈log log h⌉ i=1 n2i ) = O(n2⌈log log h⌉+1 ) = O(n log h) 16
  • 47. Chan's 2D pseudo-code Algorithm 3: ChanHullStep, a step of Chan’s algorithm Input: a list S of bidimensional points, the parameters m, H Output: the convex hull of the set, sorted counterclockwise, or an empty list, if H is < h Partition S into subsets S1, . . . , S⌈n/m⌉. for i = 1, . . . , ⌈n/m⌉ do Compute the convex hull of Si by using Graham Scan, store the output in a counter-clockwise sorted list. p0 = (0, −∞) p1 = the leftmost point of S. for k = 1, . . . , H do for i = 1, . . . , ⌈n/m⌉ do Compute the points qi ∈ S that maximizes ∠pk−1pkqi, with qi ̸= pk, by performing binary search on the vertices of the partial hull Si. pk+1 = the point q ∈ {q1, . . . , q⌈n/m⌉}. if pk+1 = pt then return {p1, . . . , pk} return incomplete 17
  • 48. Chan's 2D pseudo-code, reprise Algorithm 4: Chan’s algorithm Input: a list S of bidimensional points Output: the convex hull of the set for i = 1, 2, . . . do L = ChanHullStep(S, m, H), where m = H = min{|S|, 22i } if L ̸= incomplete then return L 18
  • 49. Chan's 2D - Empirical analysis Is a real implementation O(n log h)? Test 1: fixed hull size (1000), increasing number of points. 0 10 20 30 40 50 50000 100000 150000 200000 Number of Points Executiontime[sec] Linear Model Real Data 19
  • 50. Chan's 2D - Empirical analysis Is a real implementation O(n log h)? Test 2: fixed number of points (40000), increasing hull size. 8 9 10 11 5000 10000 15000 20000 Size of the Hull Executiontime[sec] Logarithmic Model Real Data 20
  • 52. Chan's 3D algorithm → Idea: The structure of the algorithm doesn’t change, just the ingredients. 22
  • 53. Chan's 3D algorithm → Idea: The structure of the algorithm doesn’t change, just the ingredients. Given a set S of n points with an hull of size h: 22
  • 54. Chan's 3D algorithm → Idea: The structure of the algorithm doesn’t change, just the ingredients. Given a set S of n points with an hull of size h: → Jarvis's march −→ Chand and Kapur's gift wrapping - O(nh). 22
  • 55. Chan's 3D algorithm → Idea: The structure of the algorithm doesn’t change, just the ingredients. Given a set S of n points with an hull of size h: → Jarvis's march −→ Chand and Kapur's gift wrapping - O(nh). → Graham's scan −→ Preparata and Hong 3D Algorithm - O(n log n). 22
  • 56. Chan's 3D algorithm → Idea: The structure of the algorithm doesn’t change, just the ingredients. Given a set S of n points with an hull of size h: → Jarvis's march −→ Chand and Kapur's gift wrapping - O(nh). → Graham's scan −→ Preparata and Hong 3D Algorithm - O(n log n). → Finding tangents in 2D −→ Supporting planes in 3D with Dobkin-Kirkpatrick hierarchy - O(log n). 22
  • 57. Chan's 3D algorithm → Idea: The structure of the algorithm doesn’t change, just the ingredients. Given a set S of n points with an hull of size h: → Jarvis's march −→ Chand and Kapur's gift wrapping - O(nh). → Graham's scan −→ Preparata and Hong 3D Algorithm - O(n log n). → Finding tangents in 2D −→ Supporting planes in 3D with Dobkin-Kirkpatrick hierarchy - O(log n). The overall complexity is still O(n log h). 22
  • 58. Chan's 3D algorithm → 3D Gift wrapping 23
  • 59. Chan's 3D algorithm → 3D Gift wrapping → Pick an edge ej of a face f of the partial hull. 23
  • 60. Chan's 3D algorithm → 3D Gift wrapping → Pick an edge ej of a face f of the partial hull. → Find p that maximizes the angle between f and the new face given by ej and p. Repeat for the 3 edges of f. 23
  • 61. Chan's 3D algorithm → 3D Gift wrapping → Pick an edge ej of a face f of the partial hull. → Find p that maximizes the angle between f and the new face given by ej and p. Repeat for the 3 edges of f. → Use breadth first visit to build the entire hull. 23
  • 62. Chan's 3D algorithm → 3D Gift wrapping → Pick an edge ej of a face f of the partial hull. → Find p that maximizes the angle between f and the new face given by ej and p. Repeat for the 3 edges of f. → Use breadth first visit to build the entire hull. → Preparata and Hong 3D algorithm, a divide-and-conquer algorithm for convex hulls 23
  • 63. Chan's 3D algorithm → 3D Gift wrapping → Pick an edge ej of a face f of the partial hull. → Find p that maximizes the angle between f and the new face given by ej and p. Repeat for the 3 edges of f. → Use breadth first visit to build the entire hull. → Preparata and Hong 3D algorithm, a divide-and-conquer algorithm for convex hulls → Split the set of points S in S1 and S2. 23
  • 64. Chan's 3D algorithm → 3D Gift wrapping → Pick an edge ej of a face f of the partial hull. → Find p that maximizes the angle between f and the new face given by ej and p. Repeat for the 3 edges of f. → Use breadth first visit to build the entire hull. → Preparata and Hong 3D algorithm, a divide-and-conquer algorithm for convex hulls → Split the set of points S in S1 and S2. → Recursively split until the base case, then build the convex hull. 23
  • 65. Chan's 3D algorithm → 3D Gift wrapping → Pick an edge ej of a face f of the partial hull. → Find p that maximizes the angle between f and the new face given by ej and p. Repeat for the 3 edges of f. → Use breadth first visit to build the entire hull. → Preparata and Hong 3D algorithm, a divide-and-conquer algorithm for convex hulls → Split the set of points S in S1 and S2. → Recursively split until the base case, then build the convex hull. → Merge the partial hulls. 23
  • 66. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy 24
  • 67. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. 24
  • 68. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. → Build Pi+1 from Pi by picking a maximal set of independent vertices of Pi. 24
  • 69. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. → Build Pi+1 from Pi by picking a maximal set of independent vertices of Pi. → Overall, building the hierarchies takes O(n). 24
  • 70. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. → Build Pi+1 from Pi by picking a maximal set of independent vertices of Pi. → Overall, building the hierarchies takes O(n). → Finding supporting planes in 3D 24
  • 71. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. → Build Pi+1 from Pi by picking a maximal set of independent vertices of Pi. → Overall, building the hierarchies takes O(n). → Finding supporting planes in 3D → Goal: given an edge ej and the DK hierarchy of a partial hull Hi, find the plane passing through ej and tangent to Hi in pt. 24
  • 72. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. → Build Pi+1 from Pi by picking a maximal set of independent vertices of Pi. → Overall, building the hierarchies takes O(n). → Finding supporting planes in 3D → Goal: given an edge ej and the DK hierarchy of a partial hull Hi, find the plane passing through ej and tangent to Hi in pt. → Find pt in constant time in Pk 24
  • 73. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. → Build Pi+1 from Pi by picking a maximal set of independent vertices of Pi. → Overall, building the hierarchies takes O(n). → Finding supporting planes in 3D → Goal: given an edge ej and the DK hierarchy of a partial hull Hi, find the plane passing through ej and tangent to Hi in pt. → Find pt in constant time in Pk → Step up in the hierarchy: if pt changes, it will move to a neighbour (constant time check). 24
  • 74. Chan's 3D algorithm → To find supporting planes, store each partial hull as a Dobkin-Kirkpatrick hierarchy → Sequence P0, . . . , Pk of increasingly smaller approximations of a polyhedron P = P0. → Build Pi+1 from Pi by picking a maximal set of independent vertices of Pi. → Overall, building the hierarchies takes O(n). → Finding supporting planes in 3D → Goal: given an edge ej and the DK hierarchy of a partial hull Hi, find the plane passing through ej and tangent to Hi in pt. → Find pt in constant time in Pk → Step up in the hierarchy: if pt changes, it will move to a neighbour (constant time check). → The DK hierarchy has O(log m) height. 24
  • 76. References I [1] C. Bradford Barber, David P. Dobkin, and Huhdanpaa Hannu. The quickhull algorithm for convex hulls. 1995. [2] T. M. Chan. Optimal output-sensitive convex hull algorithms in two and three dimensions. Discrete & Computational Geometry, 16(4):361–368, 1996. [3] Donald R. Chand and Sham S. Kapur. [4] Ioannis Z. Emiris and John F. Canny. An efficient approach to removing geometric degeneracies. Technical report, 1991. [5] Christer Ericson. Real-Time Collision Detection. CRC Press, Inc., Boca Raton, FL, USA, 2004. [6] A. Goshtasby and G. C. Stockman. Point pattern matching using convex hull edges. IEEE Transactions on Systems, Man, and Cybernetics, SMC-15(5), 1985. 26
  • 77. References II [7] David G. Kirkpatrick and Raimund Seidel. The ultimate planar convex hull algorithm ? Technical report, 1983. [8] Joseph O’Rourke. Computational Geometry in C. Cambridge University Press, 2nd edition, 1998. [9] F. P. Preparata and S. J. Hong. Convex hulls of finite sets of points in two and three dimensions. Commun. ACM, 20(2):87–93, February 1977. [10] Franco P. Preparata and Michael I. Shamos. Computational Geometry: An Introduction. Springer-Verlag New York, Inc., 1985. [11] Franco P. Preparata and Michael I. Shamos. Computational Geometry: An Introduction. Springer-Verlag New York, Inc., 1985. Beamer theme: Presento, by Ratul Saha. The research system in Germany, by Hazem Alsaied 27