2013-01-08 17 views
12

Pamiętam, że w pewnym momencie używam równania - jak to zrobić w JavaScript?Skalowanie między dwoma zakresami numerów

Plugin dwa zakresy numeracji:

rangeX = 1 (through) 10; 
rangeY = 300.77 (through) 559.22; 

Wprowadź wartość w rangeY skali:

inputY = 328.17; 

Konwersja do wartości proporcjonalnej w rangeX skali:

outputX = 1.43; 

Odpowiedz

20

użytkowania procentowe:

xMax = 10; 
xMin = 1; 

yMax = 559.22; 
yMin = 300.77; 

percent = (inputY - yMin)/(yMax - yMin); 
outputX = percent * (xMax - xMin) + xMin; 
0

Brak gwarancji na matematyce, ale myślę, że coś takiego:

var xLow = 1; 
var xHigh = 10: 
var yLow = 300.77; 
var yHigh = 559.22; 

var inputY = 328.17; 
var ouputX = xLow; 

var scaleYOverX = (yHigh - yLow)/(xHigh - xLow); 

if(inputY >= yLow && inputY <= yHigh) { 
    outputX = (inputY - yLow)/scaleYOverX + xLow; 
    alert(outputX); 
} else { 
    alert("Invalid input for Y scale"); 
} 
17
function convertRange(value, r1, r2) { 
    return (value - r1[ 0 ]) * (r2[ 1 ] - r2[ 0 ])/(r1[ 1 ] - r1[ 0 ]) + r2[ 0 ]; 
} 

convertRange(328.17, [ 300.77, 559.22 ], [ 1, 10 ]); 

>>> 1.9541497388276272 
+0

Dziękuję za ten przydatny funkcjonować! – SeinopSys

+0

Podoba mi się prostota tego. Dzięki! –

0

Swift 3 Z Bool dla rozszerzonego zakresu lub nie

func translate(input : Float, inputMin: Float, inputMax: Float, outputMin: Float, outputMax: Float, extendRange: Bool? = false, log: Bool? = false) -> Float { 

    //The actual translation function 
    func translationResult(_ inputMinA: Float, _ inputMaxA: Float) -> Float { 
     let myResult = outputMin + (outputMax - outputMin) * (input - inputMinA)/(inputMaxA - inputMinA) 
     return myResult 
    } 

    // extendRange true means it'll return a value outside the range of inputMin and inputMax but still follow the ratio 
    if extendRange! { 
     return result = translationResult(inputMin, inputMax) 

     if log! == true && input > inputMax || input < inputMin{ 
      print("outside range!") 
     } 
    } else { 
     //Doesn't let value go outside range 
     let inputMinA = min(inputMin, input) 
     let inputMaxA = max(inputMax, input) 

     return result = translationResult(inputMinA, inputMaxA) 
    } 
    } 


    translate(input: 50, inputMin: 100, inputMax: 1000.0, outputMin: 1, outputMax: 10, extendRange: false) => 1 
    translate(input: 50, inputMin: 100, inputMax: 1000.0, outputMin: 1, outputMax: 10, extendRange: true) => 0.5 
Powiązane problemy