私はある時点でこれを行うための方程式を使用することを覚えています - これはどのようにJavascriptで行いますか? 2つの番号範囲2つの数値範囲の間のスケーリング
プラグイン:
rangeX = 1 (through) 10;
rangeY = 300.77 (through) 559.22;
入力rangeYスケールにおける値:
inputY = 328.17;
rangeXスケールに比例した値に変換する:
outputX = 1.43;
私はある時点でこれを行うための方程式を使用することを覚えています - これはどのようにJavascriptで行いますか? 2つの番号範囲2つの数値範囲の間のスケーリング
プラグイン:
rangeX = 1 (through) 10;
rangeY = 300.77 (through) 559.22;
入力rangeYスケールにおける値:
inputY = 328.17;
rangeXスケールに比例した値に変換する:
outputX = 1.43;
使用率:
をxMax = 10;
xMin = 1;
yMax = 559.22;
yMin = 300.77;
percent = (inputY - yMin)/(yMax - yMin);
outputX = percent * (xMax - xMin) + xMin;
数学上の保証は、私はこのようなものだと思う。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");
}
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
スウィフト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
は、この便利ないただきありがとうございます関数! – SeinopSys
私はこれの単純さが好きです。ありがとう! –