Geometry in Ruby

Implementation of basic 2D geometry algorithms in Ruby.

Installation

gem 'ruby-geometry', require: 'geometry'

Defined geometry objects

  • Point

  • Segment

  • Vector

  • Polygon

  • Line

Already implemented algorithms

  • Do segments overlap? { Segments#overlaps? }

  • Do segments lie on one line? { Segment#lies_on_one_line_with? }

  • Do segments intersect? { Segment#intersects_with? }

  • Segments intersection point { Segment#intersection_point_with }

  • Does segment contain given point? { Segment#contains_point? }

  • Are segments parallel? { Segment#parallel_to? }

  • Are vectors collinear? { Vector#collinear_with? }

  • Vectors cross product (outer product, vector product) { Vector#cross_product }

  • Vectors scalar product (inner product, dot product) { Vector#scalar_product }

  • Segment length { Segment#length }

  • Vector modulus { Vector#modulus }

  • Trivial vector arithmetics: summation, subtraction, vector-number multiplication { Vector#+(vector); Vector#-(vector); Vector#*(numeric) }

  • Euclid distance { Geometry#distance }

  • Line slope { Line#slope }

  • Y-intercept of a line { Line#y_intercept }

  • X-intercept of a line { Line#x_intercept }

  • Are lines parallel? { Line#parallel_to? }

  • What x-value do lines intersect at? { Line#intersect_x }

  • What is the angle between two lines? { Line#angle_to }

  • Rectangular bounds of polygon { Polygon#bounding_box }

  • Does polygon contain a given point? { Polygon#contains? }

Coming up

  • Is polygon self-intersecting?

  • Area of polygon

  • Is polygon convex?

  • Do polygons intersect?

  • Does circle contain given point?

  • Do circles intersect?

  • Area of circle

Copyright (c) 2008 Daniel Vartanov, released under the MIT license