0% found this document useful (0 votes)
85 views

Geometry For Programming Competitions: Eugene Fink (WWW - Cs.cmu - Edu/ Eugene)

This document provides an overview of basic concepts in computational geometry that are useful for programming competitions, including representing and computing properties of points, lines, triangles, circles, and polygons. It discusses representing geometric objects with Cartesian coordinates, basic computations like finding distances and intersections, and algorithms for finding the convex hull of a set of points, such as the gift wrapping and Graham scan algorithms. The runtimes of algorithms like gift wrapping and Graham scan are provided. Readings on further computational geometry topics in programming are also referenced.

Uploaded by

veersh10
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
85 views

Geometry For Programming Competitions: Eugene Fink (WWW - Cs.cmu - Edu/ Eugene)

This document provides an overview of basic concepts in computational geometry that are useful for programming competitions, including representing and computing properties of points, lines, triangles, circles, and polygons. It discusses representing geometric objects with Cartesian coordinates, basic computations like finding distances and intersections, and algorithms for finding the convex hull of a set of points, such as the gift wrapping and Graham scan algorithms. The runtimes of algorithms like gift wrapping and Graham scan are provided. Readings on further computational geometry topics in programming are also referenced.

Uploaded by

veersh10
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Geometry for Programming Competitions

Eugene Fink (www.cs.cmu.edu/~eugene)


Available online: Word version: www.cs.cmu.edu/~eugene/research/talks/compete-geom.doc PDF version: www.cs.cmu.edu/~eugene/research/talks/compete-geom.pdf

Let no one who is ignorant of geometry enter here. Inscription on the entrance to Platos academy We humans are good at visual reasoning, but computers are not; intuitive visual operations are often hard to program.

Overview
Basic geometry: points and lines, triangle, circle, polygon area Convex hull: gift wrapping, Graham scan

Readings: Steven S. Skiena and Miguel A. Revilla. Programming Challenges Joseph ORourke. Computational geometry in C Wikipedia (wikipedia.org) Wolfram MathWorld (mathworld.wolfram.com)

Points and lines


Representation in Cartesian coordinates: Point: (x1, y1) Line: o y = m x + b (more intuitive but does not include vertical lines) o a x + b y + c = 0 (more general but non-unique and less intuitive) Line segment: two endpoints Yes/No tests: Point (x1, y1) is on line (m, b) iff y1 = m x1 + b (available in Java) Lines (m1, b1) and (m2, b2) are o identical iff m1 = m2 and b1 = b2 o parallel iff m1 = m2 o orthogonal iff m1 = 1 / m2 Counterclockwise predicate ccw (available in Java): Consider points (x1, y1), (x2, y2), and (x3, y3), and let A = x1 y2 + x2 y3 + x3 y1 y1 x2 y2 x3 y3 x1. o If A > 0, the points are in a counterclockwise order o If A < 0, the points are in a clockwise order o If A = 0, the points are collinear

Basic computations: Distance between (x1, y1) and (x2, y2): ( x1 x 2 ) 2 + ( y1 y 2 ) 2

Line through points (x1, y1) and (x2, y2): m = (y1 y2) / (x1 x2) b = y1 m x1 Intersection of (m1, b1) and (m2, b2), where m1 m2: x1 = (b2 b1) / (m1 m2) y1 = m1 x1 + b1 Angle between (m1, b1) and (m2, b2): arctan ((m2 m1) / (m1 m2 + 1))

Other useful operations: Intersection of two segments (available in Java) Distance from a point to a line or a segment (available in Java) Point on a line closest to a given point

Triangle
A triangle specification may include three sides and three angles. Given three of these six values, we can find the other three. + + = (or 180) Law of sines: a / sin = b / sin = c / sin Law of cosines (generalized Pythagorean theorem): c2 = a2 + b2 2 a b cos Law of tangents (less useful): (a b) / (a + b) = tan (( ) / 2) / tan (( + ) / 2) Area: Area = a b sin / 2 Area = | x1 y2 + x2 y3 + x3 y1 y1 x2 y2 x3 y3 x1 | / 2 Herons formula: Let s = (a + b + c) / 2; then Area = s ( s a ) ( s b) ( s c) Less useful: Area = r s = a b c / (4 R), where r is inradius and R is circumradius Other useful operations: Centers of inscribed and circumscribed circles

Circle
A circle is the set of points located at a given distance from a given center. A disk is the set of points located no further than a given distance from a given center.

Representation: Let r be the radius and (xc, yc) by the center. Circle: (x xc)2 + (y yc)2 = r2 Disk: (x xc)2 + (y yc)2 r2 Basic computations: Circumference: 2 r Area: r2 Point (x1, y1) is inside the circle iff (x1 xc)2 + (y1 yc)2 r2 Other useful operations: Intersection of a circle and a line Intersection of two circles Tangent to a circle through a given point

Polygon area
Based on vertex coordinates: | x1 y2 + x2 y3 + ... + xn y1 y1 x2 y2 x3 ... yn x1 | / 2 Picks formula for a polygon on a lattice: If a polygon has i lettice points inside and b lettice points on the boundary, its area is i + b/2 1

Convex hull
The convex hull of a geometric object is the minimal convex set containing the object. Intuitively, it is a rubber band pulled taut around the object. The hull of a finite point set is a convex polygon. The hull of a set of polygons is identical to the hull of their vertices. A polygon is convex (i.e. identical to its hull) iff all its angles are at most (180).

Gift wrapping (a.k.a. Jarvis march)

Intuitively, wrap a string around nails; simple but slow. Time complexity is O(n h), where n is the number of points and h is the number of hull vertices. Select the smallest-y point as the first hull vertex; if several, choose the largest-x point among them At each step, select the next hull vertex, which is the rightmost as seen from the previously selected vertex

Detailed description in Wikipedia: en.wikipedia.org/wiki/Gift_wrapping_algorithm


Graham scan

Efficient version of the gift wrapping. Time complexity is O(n lg n). Select the smallest-y point as the first hull vertex; if several, choose the largest-x point among them Sort the other points right-to-left, as seen from the selected vertex Walk through the points in the sorted order; when making the right turn, prune the respective point The remaining points are the hull vertices

Detailed description in Wikipedia: en.wikipedia.org/wiki/Graham_scan

You might also like