GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines...

50
GEOMETRY COMP 321 – McGill University These slides are mainly compiled from the following resources. - Professor Jaehyun Park’ slides CS 97SI - Top-coder tutorials. - Programming Challenges books.

Transcript of GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines...

Page 1: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

GEOMETRY COMP 321 – McGill University These slides are mainly compiled from the following resources.

- Professor Jaehyun Park’ slides CS 97SI - Top-coder tutorials. - Programming Challenges books.

Page 2: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Computational Geometry • Geometry • Cross Product • Convex Hull Problem • Sweep Line Algorithm

Page 3: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Line • A Line can be described with mathematical equation: y = mx + c or ax + bx + c = 0. •  The y = mx + c equation involves ‘gradient’ / ‘slope’ m.

•  Note: Be careful with vertical lines with ‘infinite’ slope. Usually, we treat the vertical lines separately in the solution code (example of the special cases in geometry problems).

• A Line Segment is a line with two end points with finite length.

Page 4: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Circles

Page 5: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Circles •  In a 2-D Cartesian coordinate system, the Circle centered

at (a, b) with radius r is the set of all points (x, y) such that (x − a)2 + (y − b)2 = r2.

•  The constant π is the Ratio of any circle’s circumference to its diameter in the Euclidean space. To avoid precision error, the safest value for programming contest is pi = 2 X acos(0.0), unless if this constant is defined in the problem description!

•  The Circumference c of a circle with a Diameter d is c = π X d where d = 2 X r.

•  The length of an Arc of a circle with a circumference c and an angle α (in degrees) is (α/360.0) x c

Page 6: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Circles •  The length of a Chord of a circle with a radius r and an

angle α (in degrees) can be obtained with the Law of Cosines: 2r2X(1−cos(α))

•  The Area A of a circle with a radius r is A = π X r2

•  The area of a Sector of a circle with an area A and an angle α (in degrees) is (α /360.0) X A

•  The area of a Segment of a circle can be found by subtracting the area of the corresponding Sector with the area of an Isosceles Triangle with sides: r, r, and Chord-length.

Page 7: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Triangles

Page 8: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Triangles •  A Triangle is a polygon with three vertices and three edges.

•  Equilateral Triangle, all three edges have the same length and all inside/interior angles are 60 degrees;

•  Isosceles Triangle, two edges have the same length; •  Scalene Triangle, no edges have the same length; •  Right Triangle, one of its interior angle is 90 degrees (or a right angle).

•  The Area A of triangle with base b and height h is A = 0.5 X b X h

•  The Perimeter p of a triangle with 3 sides: a, b, and c is p = a + b + c.

•  The Heron’s Formula: The area A of a triangle with 3 sides: a, b, c, is A = sqrt(s X (s − a) X (s − b) X (s − c)), where s = 0.5 X p (the Semi-Perimeter of the triangle).

Page 9: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Triangles •  The radius r of the Triangle’s Inner Circle with area A and

the semi-perimeter s is r = A/s. •  The radius R of the Triangle’s Outer Circle with 3 sides: a,

b, c and area A is R =a X b X c/(4 X A). • Also please check

•  Law of Cosines. •  Law of Sines •  Pythagorean Theorem. •  Pythagorean Triple.

Page 10: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Quadrilateral •  It is a polygon with four edges (and four vertices).

Page 11: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Rectangles • A Rectangle is a polygon with four edges, four vertices,

and four right angles. •  The Area A of a rectangle with width w and height h is A =

w X h. •  The Perimeter p of a rectangle with width w and height h

is p = 2 X (w + h). • A Square is a special case of rectangle where w = h.

Page 12: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Polygons • A Polygon is a plane figure that is bounded by a closed

path or circuit composed of a finite sequence of straight line segments.

• A polygon is said to be Convex if any line segment drawn inside the polygon does not intersect any edge of the polygon. Otherwise, the polygon is called Concave.

•  The area A of an n-sided polygon (either convex or concave) with n pairs of vertex coordinates given in some order (clockwise or counter-clockwise) is:

Page 13: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Geometry Basics - Polygons •  Testing if a polygon is convex (or concave) is easy with a

quite robust geometric predicate test called CCW (Counter Clockwise).

•  This test takes in 3 points p, q, r in a plane and determine if the sequence p → q → r is a left turn. •  Or in other words: p → q → r is counter-clockwise

Page 14: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

CCW • We’ll use it all the time

• Applications: •  Determining the (signed) area of a triangle •  Testing if three points are collinear •  Determining the orientation of three points •  Testing if two line segments intersect

Page 15: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Counterclockwise Predicate • Define ccw(A,B,C) = (B − A) x (C − A) = (bx − ax)(cy − ay) − (by − ay)(cx − ax).

Page 16: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Segment-Segment Intersection Test • Given two segments AB and CD • Want to determine if they intersect properly: two segments

meet at a single point that are strictly inside both segments

Page 17: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Segment-Segment Intersection Test • Assume that the segments intersect

•  From A ’s point of view, looking straight to B , C and D must lie on different sides.

•  Holds true for the other segment as well

•  The intersection exists and is proper if: •  ccw(A,B,C) X ccw(A,B,D) < 0 •  and ccw(C,D,A) X ccw(C,D,B) < 0

Page 18: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Non-proper Intersections • We need more special cases to consider!

•  e.g., If ccw(A,B,C), ccw(A,B,D), ccw(C,D,A), ccw(C,D,B) are all zeros, then two segments are collinear

• Very careful implementation is required

Page 19: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem • Given n points on the plane, find the smallest convex

polygon that contains all the given points •  For simplicity, assume that no three points are collinear

Page 20: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Simple Algorithm • AB is an edge of the convex hull iff ccw(A,B,C) have the

same sign for all other points C •  This gives us a simple algorithm

•  For each A and B: •  If ccw(A,B,C) > 0 for all C ≠ A,B:

•  Record the edge A -> B

• Walk along the recorded edges to recover the convex hull

Page 21: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • We know that the leftmost given point has to be in the

convex hull. •  We assume that there is a unique leftmost point

• Make the leftmost point the origin •  So that all other points have positive x coordinates

• Sort the points in increasing order of y/x •  Increasing order of angle, whatever you like to call it

•  Incrementally construct the convex hull using a stack

Page 22: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Points are numbered in increasing order of y/x

Page 23: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Add the first two points in the chain

Page 24: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Adding point 3 causes a concave corner 1-2-3: remove 2

Page 25: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan •  That’s better...

Page 26: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Adding point 4 to the chain causes a problem: remove 3

Page 27: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Continue adding points...

Page 28: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Continue adding points...

Page 29: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Continue adding points...

Page 30: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Bad corner!

Page 31: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Bad corner again!

Page 32: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Continue adding points...

Page 33: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Continue adding points...

Page 34: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Continue adding points...

Page 35: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Done!

Page 36: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Convex Hull Problem: Graham Scan • Set the leftmost point as (0, 0), and sort the rest of the

points in increasing order of y/x •  Initialize stack S •  For i = 1, . . . , n:

•  Let A be the second topmost element of S, B be the topmost element of S , and C be the i-th point

•  If ccw(A,B,C) < 0 , pop S and go back •  Push C to S

• Points in S form the convex hull

Page 37: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm • A problem solving strategy for geometry problems •  The main idea is to maintain a line (with some auxiliary

data structure) that sweeps through the entire plane and solve the problem locally

• We can’t simulate a continuous process, (e.g. sweeping a line) so we define events that causes certain changes in our data structure •  And process the events in the order of occurrence

• We’ll cover one sweep line algorithm

Page 38: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 39: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 40: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 41: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 42: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 43: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 44: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 45: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 46: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 47: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 48: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm

Page 49: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm •  If the sweep line hits the left edge of a rectangle

•  Insert it to the data structure

• Right edge? •  Remove it

• Move to the next event, and add the area(s) of the green rectangle(s) •  Finding the length of the union of the blue segments is the hardest

step •  There is an easy O(n) method for this step

Page 50: GEOMETRY - cs.mcgill.cadbecer/courses/Winter2017/321/Lecture7… · treat the vertical lines separately in the solution code (example of the special cases in geometry problems). •

Sweep Line Algorithm • Sweep line algorithm is a generic concept

•  Come up with the right set of events and data structures for each problem