Module: Sass::Script::Functions::RandomSass

Included in:
Sass::Script::Functions
Defined in:
lib/random_sass.rb

Instance Method Summary collapse

Instance Method Details

#assert_same_unit(value1, value2, name = nil) ⇒ Object

A couple of handy assert for type validation.

Raises:

  • (ArgumentError)


42
43
44
45
46
47
# File 'lib/random_sass.rb', line 42

def assert_same_unit(value1, value2, name = nil)
	return if value1.unit_str == value2.unit_str
	err = "#{value1} has different units than #{value2}"
	err = "$#{name}: " + err if name
	raise ArgumentError.new(err)
end

#assert_unitless(value, name = nil) ⇒ Object

Raises:

  • (ArgumentError)


49
50
51
52
53
54
55
56
57
# File 'lib/random_sass.rb', line 49

def assert_unitless(value, name = nil)
	assert_type value, :Number

	return if value.unitless?

	err = "#{value} is not unitless"
	err = "$#{name}: " + err if name
	raise ArgumentError.new(err)
end

#normal(p_mean, p_std) ⇒ Object

Returns a random number belonging to the set N(p_mean,p_std)



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/random_sass.rb', line 27

def normal(p_mean,p_std)
	assert_type p_mean, :Number
	assert_unitless p_std

	u = Random.rand(100000)/100000.0
	v = Random.rand(100000)/100000.0

	z = Math.sqrt(-2*Math.log(u)) * Math.cos(2*Math::PI*v)

	out_value = p_std.value * z + p_mean.value

	Sass::Script::Number.new(out_value,p_mean.numerator_units,p_mean.denominator_units)
end

#uniform(p_min, p_max) ⇒ Object

Returns a random number belonging to the set U(p_min,p_max)



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/random_sass.rb', line 12

def uniform(p_min,p_max)

	assert_type p_min, :Number
	assert_type p_max, :Number
	assert_same_unit p_max, p_min

	n_max = [p_max.value,p_min.value].max
	n_min = [p_max.value,p_min.value].min

	out_value = n_min + Random.rand(n_max-n_min)

	Sass::Script::Number.new(out_value,p_max.numerator_units,p_max.denominator_units)
end