Sha256: 775606515be8a43c7eb3bcbb90c29e473113577780ca7de3f1ee6cf895d64e52

Contents?: true

Size: 950 Bytes

Versions: 4

Compression:

Stored size: 950 Bytes

Contents

module Math

  class Line < Function

    attr_reader :y_start, :y_end
    attr_reader :a, :b

    #
    # +Math::Line.new(ystart, yend, xstart, xend)+:
    #
    # linear interpolation `y = a*x + b` where:
    #
    # `a = (yend-ystart)/(xend-xstart)`
    # `b = ystart - (a*xstart)`
    #
    # Arguments are:
    #
    # +ystart+, +yend+: start/end y values required
    # +xstart+, +xend+: start/end x values
    #
    #:nodoc:
    def initialize(ys, ye, xs, xe)
      @y_start = ys.to_f
      @y_end   = ye.to_f
      @x_start = xs.to_f
      @x_end   = xe.to_f
      setup
    end

    #:doc:
    #
    # +y(x)+:
    #
    # Returns a real value given x
    #
    #:nodoc:
    def y(x)
      (self.a*x) + self.b
    end

    def label
      "a: #{self.a}\nb: #{self.b}"
    end

  private

    def setup
      @a = (self.y_end - self.y_start)/(self.x_end - self.x_start)
      @b = (self.y_start - (self.x_start * self.a))
    end

  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ruby-mext-0.4.1 lib/mext/math/line.rb
ruby-mext-0.4.0 lib/mext/math/line.rb
ruby-mext-0.3.2 lib/mext/math/line.rb
ruby-mext-0.3.1 lib/mext/math/line.rb