Sha256: 9c7561fff16f371197100ccd38dc5493347ab8d8177bfd9e3ef302b90649214b

Contents?: true

Size: 877 Bytes

Versions: 1

Compression:

Stored size: 877 Bytes

Contents

# Inspired by the work CTM Davies' research, as discussed by the Strava
# blog: http://engineering.strava.com/improving-grade-adjusted-pace/
module Stressfactor
  class GradeAdjustedPaceStrategy < PaceStrategy
    attr_accessor :interval

    def self.calculate_for_interval(interval)
      observed_pace = interval.time(units: :minutes) / interval.distance
      interval.grade > 0 ? incline_pace(interval, observed_pace) : decline_pace(interval, observed_pace)
    end

    def self.decline_pace(interval, observed_pace)
      coefficient_per_grade_point = 0.01815
      grade = interval.grade
      observed_pace / (1 - (coefficient_per_grade_point * grade))
    end

    def self.incline_pace(interval, observed_pace)
      coefficient_per_grade_point = 0.033
      grade = interval.grade
      observed_pace / (1 + (coefficient_per_grade_point * grade))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
stressfactor-0.0.1 lib/stressfactor/grade_adjusted_pace_strategy.rb