Class: Tools
- Inherits:
-
Object
- Object
- Tools
- Defined in:
- app/models/tools.rb
Overview
This class keeps all the global common methods.
Constant Summary
- SS_MAX =
Maximum value of sum of squares.
10000
Class Method Summary (collapse)
-
+ (Integer) calc_distance(point1, point2)
Return calculated distance between 2 points.
-
+ (Integer) filter_in_percentage(value)
Return value which was adjusted in percentage.
-
+ (Integer) filter_in_range(adjust_max, value)
Return value which was adjusted in range.
-
+ (Float) gaussian_rand(mean = 0.0, sd = 1.0)
Return normal random number.
-
+ (Boolean) random_boolean
Return random boolean.
-
+ (Array) sort_by_dex(array)
Return arrays which were sorted by the specified parameter.
Class Method Details
+ (Integer) calc_distance(point1, point2)
Return calculated distance between 2 points.
58 59 60 |
# File 'app/models/tools.rb', line 58 def self.calc_distance(point1, point2) return Math.sqrt((point1.x - point2.x) ** 2 + (point1.y - point2.y) ** 2) end |
+ (Integer) filter_in_percentage(value)
Return value which was adjusted in percentage. 0.01 is returned if value < 0.01. 99.99 is returned if 99.99 < value.
45 46 47 48 49 50 51 52 |
# File 'app/models/tools.rb', line 45 def self.filter_in_percentage(value) if value < 0.01 value = 0.01 elsif value > 99.99 value = 99.99 end return value end |
+ (Integer) filter_in_range(adjust_max, value)
Return value which was adjusted in range. 0 is returned if value < 0. Adjust_max is returned if adjust_max < value.
31 32 33 34 35 36 37 38 |
# File 'app/models/tools.rb', line 31 def self.filter_in_range(adjust_max, value) if value < 0 value = 0 elsif adjust_max < value value = adjust_max end return value end |
+ (Float) gaussian_rand(mean = 0.0, sd = 1.0)
Return normal random number.
8 9 10 11 12 13 |
# File 'app/models/tools.rb', line 8 def self.gaussian_rand(mean = 0.0, sd = 1.0) rng = lambda { Kernel.rand } theta = 2 * Math::PI * rng.call scale = sd * Math.sqrt(-2 * Math.log(1 - rng.call)) return mean + scale * Math.cos(theta) end |
+ (Boolean) random_boolean
Return random boolean.
17 18 19 20 21 22 23 |
# File 'app/models/tools.rb', line 17 def self.random_boolean if rand(2) > 0 return true else return false end end |
+ (Array) sort_by_dex(array)
The parameter is normalized by standard deviation before sorting.
Return arrays which were sorted by the specified parameter.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/models/tools.rb', line 65 def self.sort_by_dex(array) sorted_by_dex_array = array.sort{|a,b| a.dex <=> b.dex } avg_dex = sorted_by_dex_array.inject(0.0) {|sum, i| sum += i.dex } / sorted_by_dex_array.size var_dex = sorted_by_dex_array.inject(0.0) {|sum ,i| sum += (i.dex - avg_dex)**2 } / sorted_by_dex_array.size sd_dex = Math.sqrt(var_dex) #p "avg_dex:" + avg_dex.to_s + ",var_dex:" + var_dex.to_s + ",sd_dex:" + sd_dex.to_s sorted_by_dex_array.each do |element| if var_dex == 0 or sd_dex == 0 element.ss_dex = element.dex else element.ss_dex = ((element.dex - avg_dex) / sd_dex * 10 + 50).round(2)*100 if element.ss_dex < 1 element.ss_dex = 1 elsif element.ss_dex > Params::SS_MAX - 1 element.ss_dex = Params::SS_MAX - 1 end end end end |