Class: M26::Speed
Constant Summary
Constants included
from Constants
Constants::AUTHOR, Constants::DATE, Constants::EMAIL, Constants::KILOMETERS_PER_MILE, Constants::MILES_PER_KILOMETER, Constants::SECONDS_PER_HOUR, Constants::UOM_KILOMETERS, Constants::UOM_MILES, Constants::UOM_YARDS, Constants::VERSION, Constants::YARDS_PER_KILOMETER, Constants::YARDS_PER_MILE
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(dist, et) ⇒ Speed
Returns a new instance of Speed.
16
17
18
19
20
|
# File 'lib/m26_speed.rb', line 16
def initialize(dist, et)
@distance = dist
@elapsed_time = et
@mph = 0
end
|
Instance Attribute Details
#ag_factor ⇒ Object
Returns the value of attribute ag_factor.
14
15
16
|
# File 'lib/m26_speed.rb', line 14
def ag_factor
@ag_factor
end
|
#ag_secs ⇒ Object
Returns the value of attribute ag_secs.
14
15
16
|
# File 'lib/m26_speed.rb', line 14
def ag_secs
@ag_secs
end
|
#ag_speed ⇒ Object
Returns the value of attribute ag_speed.
14
15
16
|
# File 'lib/m26_speed.rb', line 14
def ag_speed
@ag_speed
end
|
#ag_time ⇒ Object
Returns the value of attribute ag_time.
14
15
16
|
# File 'lib/m26_speed.rb', line 14
def ag_time
@ag_time
end
|
#base_age ⇒ Object
Returns the value of attribute base_age.
14
15
16
|
# File 'lib/m26_speed.rb', line 14
def base_age
@base_age
end
|
#distance ⇒ Object
Returns the value of attribute distance.
13
14
15
|
# File 'lib/m26_speed.rb', line 13
def distance
@distance
end
|
#elapsed_time ⇒ Object
Returns the value of attribute elapsed_time.
13
14
15
|
# File 'lib/m26_speed.rb', line 13
def elapsed_time
@elapsed_time
end
|
#evt_age ⇒ Object
Returns the value of attribute evt_age.
14
15
16
|
# File 'lib/m26_speed.rb', line 14
def evt_age
@evt_age
end
|
Class Method Details
.calculate_average_speed(s1, s2, t1, t2) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/m26_speed.rb', line 30
def self.calculate_average_speed(s1, s2, t1, t2)
speed1, speed2, etime1, etime2 = s1, s2, t1, t2
total_time = (etime1.secs + etime2.secs).to_f
speed1_pct = ((etime1.secs).to_f) / total_time.to_f
speed2_pct = ((etime2.secs).to_f) / total_time.to_f
spm1 = ((speed1.seconds_per_mile).to_f) * speed1_pct
spm2 = ((speed2.seconds_per_mile).to_f) * speed2_pct
spm = spm1 + spm2
tpm = M26::ElapsedTime.new(spm)
M26::Speed.new(Distance.new(1.0), tpm)
end
|
.from_pace_per_mile(ppm) ⇒ Object
22
23
24
25
26
27
28
|
# File 'lib/m26_speed.rb', line 22
def self.from_pace_per_mile(ppm)
dist = M26::Distance.new(1.0)
tokens = ppm.split(':')
secs = ((tokens[0].to_i * 60) + tokens[1].to_i).to_f
et = M26::ElapsedTime.new(secs)
M26::Speed.new(dist, et)
end
|
Instance Method Details
#age_graded(dob, event_yyyy_mm_dd, base_yyyy_mm_dd) ⇒ Object
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/m26_speed.rb', line 107
def age_graded(dob, event_yyyy_mm_dd, base_yyyy_mm_dd)
@evt_age = M26::Age.new(dob, event_yyyy_mm_dd)
@base_age = M26::Age.new(dob, base_yyyy_mm_dd)
@ag_factor = (base_age.max_pulse / evt_age.max_pulse).to_f
@ag_secs = (elapsed_time.secs.to_f) * ag_factor
@ag_time = M26::ElapsedTime.new(ag_secs)
@ag_speed = M26::Speed.new(distance, ag_time)
@ag_speed
end
|
#get_kph ⇒ Object
50
51
52
|
# File 'lib/m26_speed.rb', line 50
def get_kph
@distance.get_kilometers / @elapsed_time.as_hours();
end
|
#get_mph ⇒ Object
44
45
46
47
48
|
# File 'lib/m26_speed.rb', line 44
def get_mph
num = @distance.get_miles.to_f
den = @elapsed_time.as_hours
num / den
end
|
#get_yph ⇒ Object
54
55
56
|
# File 'lib/m26_speed.rb', line 54
def get_yph
@distance.get_yards / @elapsed_time.as_hours();
end
|
#pace_per_mile ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/m26_speed.rb', line 58
def pace_per_mile
spm = seconds_per_mile()
mm = (spm / 60).floor;
ss = spm - (mm * 60);
if (ss < 10)
ss = '0' + ss.to_s;
else
ss = '' + ss.to_s;
end
ss = ss.slice(0..4)
return "#{mm}:#{ss}";
end
|
#projected_time(another_distance, algorithm = 'simple', pow = 1.06, debug = false) ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/m26_speed.rb', line 76
def projected_time(another_distance, algorithm='simple', pow=1.06, debug=false)
if (algorithm == 'riegel')
t1 = @elapsed_time.secs
d1 = @distance.get_miles
d2 = another_distance.get_miles
t2 = t1.to_f * ((d2.to_f / d1.to_f) ** pow)
et = ElapsedTime.new(t2);
return et.as_hhmmss
else
projSecs = seconds_per_mile() * another_distance.get_miles();
et = ElapsedTime.new(projSecs);
return et.as_hhmmss
end
end
|
#projected_times(space_delim_distances) ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/m26_speed.rb', line 91
def projected_times(space_delim_distances)
results = {}
array = space_delim_distances.split(' ');
array.each { |d|
another_distance = Distance.new(d.to_f, "m");
projSecs = seconds_per_mile() * another_distance.get_miles();
et = ElapsedTime.new(projSecs);
results["#{d}"] = et.as_hhmmss;
}
return results;
end
|
#seconds_per_mile ⇒ Object
72
73
74
|
# File 'lib/m26_speed.rb', line 72
def seconds_per_mile
@elapsed_time.secs / @distance.get_miles
end
|
#to_s ⇒ Object
103
104
105
|
# File 'lib/m26_speed.rb', line 103
def to_s
return "Speed: miles=#{@distance.get_miles} seconds=#{@elapsed_time.secs} mph=#{get_mph()} kph=#{get_kph()} yph=#{get_yph()}"
end
|