2013-01-08 33 views
12

Tôi nhớ sử dụng phương trình để thực hiện việc này tại một số điểm - làm cách nào bạn thực hiện việc này trong Javascript?Chia tỷ lệ giữa hai phạm vi số

Plugin hai số dao động:

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

Input một giá trị trong phạm vi rangeY:

inputY = 328.17; 

Chuyển đổi sang giá trị tương ứng trong rangeX quy mô:

outputX = 1.43; 

Trả lời

20

Sử dụng tỷ lệ:

xMax = 10; 
xMin = 1; 

yMax = 559.22; 
yMin = 300.77; 

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

Không có bảo đảm về toán học, nhưng tôi nghĩ rằng một cái gì đó như thế này:

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

Cảm ơn bạn đã có ích này chức năng! – SeinopSys

+0

Tôi thích sự đơn giản này. Cảm ơn! –

0

Swift 3 Với Bool cho phạm vi mở rộng hay không

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 
Các vấn đề liên quan