class Cartesius::Parabola
Public Class Methods
by_definition(directrix:, focus:)
click to toggle source
# File lib/cartesius/parabola.rb, line 18 def self.by_definition(directrix:, focus:) if directrix.include?(focus) raise ArgumentError.new('Focus belongs to directrix!') end unless directrix.horizontal? raise ArgumentError.new('Directrix is not parallel to x-axis!') end a = Rational(1, 2 * (focus.y - directrix.y_intercept)) b = -2 * a * focus.x c = a * (focus.x ** 2) + focus.y - Rational(1, 4 * a) new(x2: a, x: b, k: c) end
by_points(point1:, point2:, point3:)
click to toggle source
# File lib/cartesius/parabola.rb, line 34 def self.by_points(point1:, point2:, point3:) a, b, c = Cramer.solution3( [point1.x ** 2, point1.x, 1], [point2.x ** 2, point2.x, 1], [point3.x ** 2, point3.x, 1], [point1.y, point2.y, point3.y] ) new(x2: a, x: b, k: c) rescue raise ArgumentError.new('Invalid points!') end
new(x2:, x:, k:)
click to toggle source
Conic Conic equation type: ax^2 + dx - y + f = 0
# File lib/cartesius/parabola.rb, line 13 def initialize(x2:, x:, k:) @x2_coeff, @x_coeff, @y_coeff, @k_coeff = x2.to_r, x.to_r, -1, k.to_r validation end
Public Instance Methods
==(parabola)
click to toggle source
# File lib/cartesius/parabola.rb, line 78 def == (parabola) parabola.instance_of?(self.class) && parabola.focus == focus && parabola.directrix == directrix end
congruent?(parabola)
click to toggle source
# File lib/cartesius/parabola.rb, line 73 def congruent?(parabola) parabola.instance_of?(self.class) && parabola.eccentricity == eccentricity end
directrix()
click to toggle source
# File lib/cartesius/parabola.rb, line 47 def directrix Line.horizontal(known_term: Rational(-delta - 1, 4 * @x2_coeff)) end
eccentricity()
click to toggle source
# File lib/cartesius/parabola.rb, line 63 def eccentricity @x2_coeff.abs end
focus()
click to toggle source
# File lib/cartesius/parabola.rb, line 51 def focus Point.new(x: Rational(-@x_coeff, 2 * @x2_coeff), y: Rational(1 - delta, 4 * @x2_coeff)) end
symmetry_axis()
click to toggle source
# File lib/cartesius/parabola.rb, line 59 def symmetry_axis Line.vertical(known_term: Rational(-@x_coeff, 2* @x2_coeff)) end
to_equation()
click to toggle source
# File lib/cartesius/parabola.rb, line 67 def to_equation equationfy( 'x^2' => @x2_coeff, 'x' => @x_coeff, 'y' => -1, '1' => @k_coeff ) end
vertex()
click to toggle source
# File lib/cartesius/parabola.rb, line 55 def vertex Point.new(x: Rational(-@x_coeff, 2 * @x2_coeff), y: Rational(-delta, 4 * @x2_coeff)) end
Private Instance Methods
delta()
click to toggle source
# File lib/cartesius/parabola.rb, line 91 def delta (@x_coeff ** 2) - (4 * @x2_coeff * @k_coeff) end
validation()
click to toggle source
# File lib/cartesius/parabola.rb, line 85 def validation if @x2_coeff == 0 raise ArgumentError.new('Invalid coefficients!') end end