class RubyPager::GaussianNoise

Public Class Methods

new(ex_mean, ex_stddev, ex_rand_helper = lambda { Kernel.rand }) click to toggle source
# File lib/ruby_pager/gaussian_noise.rb, line 5
def initialize(ex_mean, ex_stddev, ex_rand_helper = lambda { Kernel.rand })
  @rand_helper = ex_rand_helper
  @mean = ex_mean
  @stddev = ex_stddev
  @valid = false
  @next = 0
end

Private Class Methods

gaussian(mean, stddev, rand) click to toggle source
# File lib/ruby_pager/gaussian_noise.rb, line 26
def self.gaussian(mean, stddev, rand)
  theta = 2 * Math::PI * rand.call
  rho = Math.sqrt(-2 * Math.log(1 - rand.call))
  scale = stddev * rho
  x = mean + scale * Math.cos(theta)
  y = mean + scale * Math.sin(theta)
  return x, y
end

Public Instance Methods

rand() click to toggle source
# File lib/ruby_pager/gaussian_noise.rb, line 13
def rand
  if @valid then
    @valid = false
    return @next
  else
    @valid = true
    x, y = self.class.gaussian(@mean, @stddev, @rand_helper)
    @next = y
    return x
  end
end