233 Geometric Intersections



This week’s quiz is to detect the intersections of various geometric elements: circles, lines, and polygons.

A circle is defined by a point and a radius.

point = [6, 3]
radius = 5
a = Circle.new(point, radius)

A line can be defined by two points, or a point and a slope.

p1 = [0, 0]
p2 = [4, 2]
line = Line.new(p1, p2)
slope = 0.5
line = Line.new(p1, slope)

A polygon can be defined as a collection of points.

b1 = [2, 9]
b2 = [1, 3]
b3 = [7, 5]

b = Polygon.new(b1, b2, b3)

def intersect(a, b)
  # Should return true or false indicating whether or not
  # a and b intersect. a and b can be any circle, line or
  # polygon.

You may also find it more natural to define a.intersect(b) or b.intersect(a). The relation should be symmetric and reflexive, though not transitive.

Which methods you choose to add to the geometric elements is up to you, the only hard requirement is that the intersect method(s) return the correct truth values.

Have fun!

Extra Credit: handle the “edge” cases of the polygon comprised of one point (a single point) or two points (a line segment).

Extra Extra Credit: Provide a graphical and colorful output indicating intersections.

Tuesday, June 01, 2010