Briahas
11/18/2016 - 4:48 PM

Log scale

Log scale

    private func wpmForSliderValue(_ sliderValue: RangeValue) -> RangeValue {
        // Input will be between min and max
        let minX = Float(priceSlider.frame.minX)
        let maxX = Float(priceSlider.frame.maxX)
        
        // Output will be between minv and maxv
        let minV = log(defaultPriceRange.lower)
        let maxV = log(defaultPriceRange.upper)
        
        // Adjustment factor
        let scale = (maxV - minV) / (maxX - minX)
        let lower = exp(minV + (scale * (sliderValue.lower - minX)))
        let upper = exp(minV + (scale * (sliderValue.upper - minX)))
        return RangeValue.init(lower: lower, upper: upper)
    }
    
    private func sliderValueForWpm(_ wpm: RangeValue) -> RangeValue {
        // Output will be between minv and maxv
        let min = Float(priceSlider.frame.minX)
        let max = Float(priceSlider.frame.maxX)
        
        // Input will be between min and max
        let minv = log(defaultPriceRange.lower)
        let maxv = log(defaultPriceRange.upper)
        
        // Adjustment factor
        let scale = (maxv - minv) / (max - min)
        let lower = (((log(wpm.lower) - minv) / scale) + min)
        let upper = (((log(wpm.upper) - minv) / scale) + min)

        return RangeValue.init(lower: lower, upper: upper)
    }