Geometry
Tmas Ken Magnsson
Bjarki gst Gumundsson
School of Computer Science
Reykjavk University
rangursrk forritun og lausn verkefna
Today were going to cover
Geometry
Computational geometry
Points and vectors
Points and vectors
(3, 6)
Points are represented
by a pair of numbers,
(x, y).
(1, 3)
(6, 3)
Points and vectors
(3, 6)
(1, 3)
(6, 3)
Points are represented
by a pair of numbers,
(x, y).
Vectors are represented
in the same way.
Thinking of points as
vectors us to do many
things.
Points and vectors
u
v
Points and vectors
Simplest operation,
addition is defined as
( ) ( ) (
)
x0
x1
x0 + x1
+
=
y0
y1
y0 + y1
u
v
Points and vectors
u + v
Simplest operation,
addition is defined as
( ) ( ) (
)
x0
x1
x0 + x1
+
=
y0
y1
y0 + y1
u
v
Points and vectors
Simplest operation,
addition is defined as
( ) ( ) (
)
x0
x1
x0 + x1
+
=
y0
y1
y0 + y1
Subtraction is defined in
the same manner
( ) ( ) (
)
x0
x1
x0 x1
=
y0
y1
y0 y1
u
v
Points and vectors
Simplest operation,
addition is defined as
( ) ( ) (
)
x0
x1
x0 + x1
+
=
y0
y1
y0 + y1
Subtraction is defined in
the same manner
( ) ( ) (
)
x0
x1
x0 x1
=
y0
y1
y0 y1
u
v
u v
Points and vectors
struct point {
double x, y;
point(double _x, double _y) {
x = _x, y = _y;
}
point operator+(const point &oth){
return point(x + oth.x, y + oth.y);
}
point operator-(const point &oth){
return point(x - oth.x, y - oth.y);
}
};
5
Points and vectors
or we could use the complex<double> class.
typedef complex<double> point;
Points and vectors
or we could use the complex<double> class.
typedef complex<double> point;
The complex class in C++ and Java has methods defined
for
Addition
Subtraction
Multiplication by a scalar
Length
Trigonometric functions
Points and vectors
Complex numbers have the real part and the imaginary
part. Can be thought of as vectors or points on the
complex plane.
Points and vectors
Complex numbers have the real part and the imaginary
part. Can be thought of as vectors or points on the
complex plane.
double real(p) returns the real part, or in our case,
the x value of p
Points and vectors
Complex numbers have the real part and the imaginary
part. Can be thought of as vectors or points on the
complex plane.
double real(p) returns the real part, or in our case,
the x value of p
double imag(p) returns the imaginary part, y value of
p.
Points and vectors
Complex numbers have the real part and the imaginary
part. Can be thought of as vectors or points on the
complex plane.
double real(p) returns the real part, or in our case,
the x value of p
double imag(p) returns the imaginary part, y value of
p.
double abs(p) returns the absolute value of the
complex number, the length of the vector.
Points and vectors
Complex numbers have the real part and the imaginary
part. Can be thought of as vectors or points on the
complex plane.
double real(p) returns the real part, or in our case,
the x value of p
double imag(p) returns the imaginary part, y value of
p.
double abs(p) returns the absolute value of the
complex number, the length of the vector.
double sin(p), double cos(p), double tan(p),
trigonometric functions.
Lines and line segments
Line segments are
represented by a pair of
points, ((x0 , y0 ), (x1 , y1 )).
Lines and line segments
p1 p0
p1
Line segments are
represented by a pair of
points, ((x0 , y0 ), (x1 , y1 )).
Distance between two
points is the length of the
line segment or vector
between the points.
p0
Lines and line segments
p1 p0
Line segments are
represented by a pair of
points, ((x0 , y0 ), (x1 , y1 )).
Distance between two
points is the length of the
line segment or vector
between the points.
d((x0 ,y0 ), (x1 , y1 ))
= |(x1 x0 , y1 y0 )|
= (x1 x0 )2 + (y1 y0 )2
Lines and line segments
struct point {
...
double distance(point oth = point(0,0)) const {
return sqrt(pow(x - oth.x, 2.0)
+ pow(y - oth.y, 2.0));
}
...
}
Lines and line segments
struct point {
...
double distance(point oth = point(0,0)) const {
return sqrt(pow(x - oth.x, 2.0)
+ pow(y - oth.y, 2.0));
}
...
}
Or use the abs function with complex<double>.
Lines and line segments
Line representation same as
line segments.
10
Lines and line segments
p1
q0
Line representation same as
line segments.
Treat them as lines passing
through the two points.
q1
p0
10
Lines and line segments
r0
p1
r1
Line representation same as
line segments.
Treat them as lines passing
through the two points.
Or as a point and a direction
vector.
p + t r
p0
10
Lines and line segments
r0
p1
r1
Line representation same as
line segments.
Treat them as lines passing
through the two points.
Or as a point and a direction
vector.
p + t r
p0
Either way
pair<point,point>
10
Circles
Circles are very easy to
represent.
11
Circles
Circles are very easy to
represent.
Center point p = (x, y).
p1
p0
11
Circles
r0
r1
p1
Circles are very easy to
represent.
Center point p = (x, y).
And the radius r.
p0
11
Circles
r0
r1
p1
p0
Circles are very easy to
represent.
Center point p = (x, y).
And the radius r.
pair<point,double>
11
Dot product
Given two vectors
( )
x0
u =
y0
( )
x1
v =
y1
the dot product of u and v is defined as
( ) ( )
x0
x
1 = x0 x1 + y0 y1
y0
y1
12
Dot product
Given two vectors
( )
x0
u =
y0
( )
x1
v =
y1
the dot product of u and v is defined as
( ) ( )
x0
x
1 = x0 x1 + y0 y1
y0
y1
Which in geometric terms is
u v = |u||v| cos
12
Dot product
Allows us to calculate the
angle between u and v.
)
(
u v
= arccos
|u||v|
13
Dot product
Allows us to calculate the
angle between u and v.
)
(
u v
= arccos
|u||v|
And the projection of v onto u.
(
)
u v
u
vu =
|u|
vu
13
Dot product
The closest point on u to p is
q.
v
q
vu
13
Dot product
The closest point on u to p is
q.
The distance from p to u is the
distance from p to q.
vu
13
Dot product
vu
The closest point on u to p is
q.
The distance from p to u is the
distance from p to q.
Unless q is outside u, then the
closest point is either of the
endpoints.
13
Dot product
Rest of the code will use the complex class.
#define P(p) const point &p
#define L(p0, p1) P(p0), P(p1)
double dot(P(a), P(b)) {
return real(a) * real(b) + imag(a) * imag(b);
}
double angle(P(a), P(b), P(c)) {
return acos(dot(b - a, c - b) / abs(b - a) / abs(c - b));
}
point closest_point(L(a, b), P(c), bool segment = false) {
if (segment) {
if (dot(b - a, c - b) > 0) return b;
if (dot(a - b, c - a) > 0) return a;
}
double t = dot(c - a, b - a) / norm(b - a);
return a + t * (b - a);
}
14
Cross product
Given two vectors
( )
x0
u =
y0
( )
x1
v =
y1
the cross product of u and v is defined as
( ) ( )
x0
x1
y0 y1 = x0 y1 y0 x1
15
Cross product
Given two vectors
( )
x0
u =
y0
( )
x1
v =
y1
the cross product of u and v is defined as
( ) ( )
x0
x1
y0 y1 = x0 y1 y0 x1
Which in geometric terms is
|u v| = |u||v| sin
15
Cross product
Allows us to calculate the area
of the triangle formed by u
and v.
|u v|
2
16
Cross product
1
|u
2
Allows us to calculate the area
of the triangle formed by u
and v.
|u v|
2
v|
u
16
Cross product
Allows us to calculate the area
of the triangle formed by u
and v.
|u v|
2
And can tell us if the angle
between u and v is positive or
negative.
1
|u
2
v|
u
|u v| < 0
|u v| = 0
|u v| > 0
iff
iff
iff
<
=
>
16
Counterclockwise
C
v
Given three points A, B and C, we
want to know if they form a
counter-clockwise angle in that
order.
ABC
17
Counterclockwise
C
Given three points A, B and C, we
want to know if they form a
counter-clockwise angle in that
order.
ABC
We can examine the cross product
of and the area of the triangle
formed by
+
u
u = B C v = B A
u v > 0
17
Counterclockwise
C
u
The points in the reverse order do
not form a counter clockwise angle.
CBA
In the reverse order the vectors
swap places
u = B A v = B C
u v < 0
17
Counterclockwise
C
CBA
u
B
The points in the reverse order do
not form a counter clockwise angle.
In the reverse order the vectors
swap places
u = B A v = B C
u v < 0
If the points A, B and C are on the
same line, then the area will be 0.
17
Counterclockwise
double cross(P(a), P(b)) {
return real(a)*imag(b) - imag(a)*real(x);
}
double ccw(P(a), P(b), P(c)) {
return cross(b - a, c - b);
}
bool collinear(P(a), P(b), P(c)) {
return abs(ccw(a, b, c)) < EPS;
}
18
Intersections
Very common task is to find the intersection of two lines or
line segments.
19
Intersections
Very common task is to find the intersection of two lines or
line segments.
Given a pair of points (x0 , y0 ), (x1 , y1 ), representing a
line we want to start by obtaining the form
Ax + By = C.
19
Intersections
Very common task is to find the intersection of two lines or
line segments.
Given a pair of points (x0 , y0 ), (x1 , y1 ), representing a
line we want to start by obtaining the form
Ax + By = C.
We can do so by setting
A = y1 y0
B = x0 x1
C = A x0 + B y1
19
Intersections
Very common task is to find the intersection of two lines or
line segments.
Given a pair of points (x0 , y0 ), (x1 , y1 ), representing a
line we want to start by obtaining the form
Ax + By = C.
We can do so by setting
A = y1 y0
B = x0 x1
C = A x0 + B y1
If we have two lines given by such equations, we
simply need to solve for the two unknowns, x and y.
19
Intersections
For two lines
A0 x + B0 y = C0
A1 x + B1 y = C1
The intersection point is
(B1 C0 B0 C1 )
D
(A0 C1 A1 C0 )
y=
D
x=
Where
D = A0 B1 A1 B0
20
Intersections
Quite similar problem is to find the intersections of two
circles.
rA
A
rB
d
21
Intersections
Quite similar problem is to find the intersections of two
circles.
rA
A
If d > r0 + r1 the circles do
not intersect.
rB
d
21
Intersections
Quite similar problem is to find the intersections of two
circles.
rA
A
If d > r0 + r1 the circles do
not intersect.
If d < |r0 r1 |, one circles is
contained within the other.
rB
d
21
Intersections
Quite similar problem is to find the intersections of two
circles.
rA
A
rB
d
If d > r0 + r1 the circles do
not intersect.
If d < |r0 r1 |, one circles is
contained within the other.
If d = 0 and r0 = r1 , the
circles are the same.
21
Intersections
Quite similar problem is to find the intersections of two
circles.
rA
A
rB
d
If d > r0 + r1 the circles do
not intersect.
If d < |r0 r1 |, one circles is
contained within the other.
If d = 0 and r0 = r1 , the
circles are the same.
Lets look at the last case.
21
Intersections
Quite similar problem is to find the intersections of two
circles.
We can solve for the vectors
a and h from the equations
a2 + h2 = r20
rA
A
rB
h
a
b2 + h2 = r21
21
Intersections
Quite similar problem is to find the intersections of two
circles.
We can solve for the vectors
a and h from the equations
a2 + h2 = r20
rA
A
rB
h
a
b2 + h2 = r21
We get
a=
r2A r2B + d2 )
2d
h2 = r2A a2
21
Intersections
#define C(p, r) const point &p, double r
int intersect(C(A, rA), C(B, rB), point & res1, point & res2) {
double d = abs(B - A);
if ( rA + rB < d - EPS || d < abs(rA - rB) - EPS){
return 0;
}
double a = (rA*rA - rB*rB + d*d) / 2*d;
double h = sqrt(rA*rA - a*a);
point v = normalize(B - A, a);
u = normalize(rotate(B-A), h);
res1 = A + v + u;
res2 = A + v - u;
if (abs(u) < EPS){
return 1;
}
return 2;
}
22
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
We pick one starting point.
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
We pick one starting point.
Go through all the other
adjacent pair of points and sum
the area of the triangulation.
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
We pick one starting point.
Go through all the other
adjacent pair of points and sum
the area of the triangulation.
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
We pick one starting point.
Go through all the other
adjacent pair of points and sum
the area of the triangulation.
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
We pick one starting point.
Go through all the other
adjacent pair of points and sum
the area of the triangulation.
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
We pick one starting point.
Go through all the other
adjacent pair of points and sum
the area of the triangulation.
Even if we sum up area outside
the polygon, due to the cross
product, it is subtracted later.
23
Polygons
Polygons are represented by
a list of points in the order
representing the edges.
To calculate the area
We pick one starting point.
Go through all the other
adjacent pair of points and sum
the area of the triangulation.
Even if we sum up area outside
the polygon, due to the cross
product, it is subtracted later.
23
Polygons
double polygon_area_signed(const vector<point> &p) {
double area = 0;
int cnt = size(p);
for (int i = 1; i + 1 < cnt; i++){
area += cross(p[i] - p[0], p[i + 1] - p[0])/2;
}
return area;
}
double polygon_area(vector<point> &p) {
return abs(polygon_area_signed(p));
}
24
Convex hull
Given a set of points, we want to find the convex hull
of the points.
25
Convex hull
Given a set of points, we want to find the convex hull
of the points.
The convex hull of points can be visualized as the
shape formed by a rubber band around the set of
points.
25
Convex hull
Given a set of points, we want to find the convex hull
of the points.
The convex hull of points can be visualized as the
shape formed by a rubber band around the set of
points.
25
Convex hull
Given a set of points, we want to find the convex hull
of the points.
The convex hull of points can be visualized as the
shape formed by a rubber band around the set of
points.
25
Convex hull
Graham scan:
26
Convex hull
Graham scan:
Pick the point p0 with the lowest y coordinate.
26
Convex hull
Graham scan:
Pick the point p0 with the lowest y coordinate.
Sort all the points by polar angle with p0 .
26
Convex hull
Graham scan:
Pick the point p0 with the lowest y coordinate.
Sort all the points by polar angle with p0 .
Iterate through all the points
26
Convex hull
Graham scan:
Pick the point p0 with the lowest y coordinate.
Sort all the points by polar angle with p0 .
Iterate through all the points
If the current point forms a clockwise angle with the
last two points, remove last point from the convex set.
26
Convex hull
Graham scan:
Pick the point p0 with the lowest y coordinate.
Sort all the points by polar angle with p0 .
Iterate through all the points
If the current point forms a clockwise angle with the
last two points, remove last point from the convex set.
Otherwise, add the current point to the convex set.
26
Convex hull
Graham scan:
Pick the point p0 with the lowest y coordinate.
Sort all the points by polar angle with p0 .
Iterate through all the points
If the current point forms a clockwise angle with the
last two points, remove last point from the convex set.
Otherwise, add the current point to the convex set.
Time complexity O(N log N).
26
Convex hull
27
Convex hull
27
Convex hull
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
9
11
12
7
6
8
10
5
p0
2
1
27
Convex hull
point hull[MAXN];
int convex_hull(vector<point> p) {
int n = size(p), l = 0;
sort(p.begin(), p.end(), cmp);
for (int i = 0; i < n; i++) {
if (i > 0 && p[i] == p[i - 1])
continue;
while (l >= 2 && ccw(hull[l - 2], hull[l - 1], p[i]) >= 0)
l--;
hull[l++] = p[i];
}
int r = l;
for (int i = n - 2; i >= 0; i--) {
if (p[i] == p[i + 1])
continue;
while (r - l >= 1 && ccw(hull[r - 2], hull[r - 1], p[i]) >= 0)
r--;
hull[r++] = p[i];
}
return l == 1 ? 1 : r - 1;
}
28
Convex hull
Many other algorithms exist
29
Convex hull
Many other algorithms exist
Gift wrapping aka Jarvis march.
29
Convex hull
Many other algorithms exist
Gift wrapping aka Jarvis march.
Quick hull, similar idea to quicksort.
29
Convex hull
Many other algorithms exist
Gift wrapping aka Jarvis march.
Quick hull, similar idea to quicksort.
Divide and conquer.
29
Convex hull
Many other algorithms exist
Gift wrapping aka Jarvis march.
Quick hull, similar idea to quicksort.
Divide and conquer.
Some can be extended to three dimensions, or higher.
29
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in convex polygon
Simple algorithm to check if a point is in a convex polygon.
We start by calculating the
area of the polygon.
To check if our point is
contained in the polygon we
sum up the area of the
triangles formed the point
and every two adjacent
points.
The total area of the triangles
is equal to the area of the
polygon iff the point is inside
the polygon.
30
Point in concave polygon
How about non convex polygon?
31
Point in concave polygon
How about non convex polygon?
The even-odd rule algorithm.
31
Point in concave polygon
How about non convex polygon?
The even-odd rule algorithm.
We examine a ray passing through the polygon to the
point.
31
Point in concave polygon
How about non convex polygon?
The even-odd rule algorithm.
We examine a ray passing through the polygon to the
point.
If the ray crosses the boundary of the polygon, then it
alternately goes from outside to inside, and outside to
inside.
31
Point in concave polygon
32
Point in concave polygon
Ray from the outside of
the polygon to the point.
32
Point in concave polygon
Ray from the outside of
the polygon to the point.
Count the number of
intersection points.
32
Point in concave polygon
Ray from the outside of
the polygon to the point.
Count the number of
intersection points.
If odd, then the point is
inside the polygon.
If even, then the point is
outside the polygon.
32
Point in concave polygon
Ray from the outside of
the polygon to the point.
Count the number of
intersection points.
If odd, then the point is
inside the polygon.
If even, then the point is
outside the polygon.
Does not matter which
ray we pick.
32
Point in concave polygon
Ray from the outside of
the polygon to the point.
Count the number of
intersection points.
If odd, then the point is
inside the polygon.
If even, then the point is
outside the polygon.
Does not matter which
ray we pick.
32
Point in concave polygon
Ray from the outside of
the polygon to the point.
Count the number of
intersection points.
If odd, then the point is
inside the polygon.
If even, then the point is
outside the polygon.
Does not matter which
ray we pick.
32
Point in concave polygon
Ray from the outside of
the polygon to the point.
Count the number of
intersection points.
If odd, then the point is
inside the polygon.
If even, then the point is
outside the polygon.
Does not matter which
ray we pick.
32
Closest pair of points
Given a set of points, we want to find the pair of points
with the smallest distance between them.
Divide and conquer algorithm;
33
Closest pair of points
Given a set of points, we want to find the pair of points
with the smallest distance between them.
Divide and conquer algorithm;
Sort points by the x-coordinate.
33
Closest pair of points
Given a set of points, we want to find the pair of points
with the smallest distance between them.
Divide and conquer algorithm;
Sort points by the x-coordinate.
Split the set into two equal sized sets by the vertical
line of the medial x value.
33
Closest pair of points
Given a set of points, we want to find the pair of points
with the smallest distance between them.
Divide and conquer algorithm;
Sort points by the x-coordinate.
Split the set into two equal sized sets by the vertical
line of the medial x value.
Solve the problem recursively in the left and right
subset.
33
Closest pair of points
Given a set of points, we want to find the pair of points
with the smallest distance between them.
Divide and conquer algorithm;
Sort points by the x-coordinate.
Split the set into two equal sized sets by the vertical
line of the medial x value.
Solve the problem recursively in the left and right
subset.
Sort the two subsets by the y-coordinate.
33
Closest pair of points
Given a set of points, we want to find the pair of points
with the smallest distance between them.
Divide and conquer algorithm;
Sort points by the x-coordinate.
Split the set into two equal sized sets by the vertical
line of the medial x value.
Solve the problem recursively in the left and right
subset.
Sort the two subsets by the y-coordinate.
Find the smallest distance among the pair of points
which lie on different sides of the line.
33
Closest pair of points
Takk fyrir nnina!
Gangi ykkur vel og ga skemmtun prfinu morgun!
34