class GeometricLine

Public Class Methods

new_by_arrays(point1_coordinates, point2_coordinates) click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 3
def self.new_by_arrays(point1_coordinates, point2_coordinates)
  self.new(GeometricPoint.new_by_array(point1_coordinates),
           GeometricPoint.new_by_array(point2_coordinates))
end

Public Instance Methods

angle_to(another_line) click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 8
def angle_to(another_line)
  sa = Math::atan(slope)
  oa = Math::atan(another_line.slope)
  (sa-oa).abs
end
distance_to(point) click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 14
def distance_to(point)
  x0 = point.x
  y0 = point.y

  x1 = point1.x
  x2 = point2.x
  y1 = point1.y
  y2 = point2.y

  (((x2-x1)*(y1-y0))-((x1-x0)*(y2-y1))).abs/Math.sqrt((x2-x1)**2+(y2-y1)**2)
end
horizontal?() click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 26
def horizontal?
  slope == 0
end
intersect_x(another_line) click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 30
def intersect_x(another_line)
  if vertical? and another_line.vertical?
    if x_intercept == another_line.x_intercept
      return x_intercept
    else
      return nil
    end
  end

  return nil if horizontal? and another_line.horizontal?

  return x_intercept if vertical?
  return another_line.x_intercept if another_line.vertical?

  d_intercept = another_line.y_intercept - y_intercept
  d_slope = slope - another_line.slope

  d_intercept / d_slope
end
parallel_to?(another_line) click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 50
def parallel_to?(another_line)
  return true if slope.infinite? and another_line.slope.infinite?

  slope == another_line.slope
end
slope() click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 56
def slope
  dy = Float(point2.y - point1.y)
  dx = Float(point2.x - point1.x)

  return 0.0 if dy == 0

  dy / dx
end
vertical?() click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 65
def vertical?
  if slope.infinite?
    return true
  else
    return false
  end
end
x_intercept() click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 73
def x_intercept
  return nil if horizontal?

  dx = point1.y / slope
  point1.x - dx
end
y_intercept() click to toggle source
# File lib/flash_math/modules/geometry/geometric_line.rb, line 80
def y_intercept
  return nil if vertical?

  dy = point1.x * slope
  point1.y - dy
end