2013-01-08 21 views
12

私はある時点でこれを行うための方程式を使用することを覚えています - これはどのようにJavascriptで行いますか? 2つの番号範囲2つの数値範囲の間のスケーリング

プラグイン:

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

入力rangeYスケールにおける値:

inputY = 328.17; 

rangeXスケールに比例した値に変換する:

outputX = 1.43; 

答えて

20

使用率:

xMax = 10; 
xMin = 1; 

yMax = 559.22; 
yMin = 300.77; 

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

数学上の保証は、私はこのようなものだと思う。BOOLで

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

は、この便利ないただきありがとうございます関数! – SeinopSys

+0

私はこれの単純さが好きです。ありがとう! –

0

スウィフト3 拡張範囲のためか

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