2013-01-08 9 views
12

Ricordo di aver usato un'equazione per farlo a un certo punto - come si fa in Javascript?Scala tra due intervalli di numeri

plugin due serie di numeri:

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

ingresso un valore nella scala rangey:

inputY = 328.17; 

Conversione di valore proporzionale a rangeX scala:

outputX = 1.43; 

risposta

20

Usa percentuali:

xMax = 10; 
xMin = 1; 

yMax = 559.22; 
yMin = 300.77; 

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

Nessuna garanzia sulla matematica, ma credo che qualcosa di simile:

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

Grazie per questo a portata di mano funzione! – SeinopSys

+0

Mi piace la semplicità di questo. Grazie! –

0

Swift 3 Con Bool per gamma estesa o no

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 
Problemi correlati