2014-02-27 114 views
0

我正在嘗試制定一個可用於計算值的通用方法,與我定義的最小值相關。用於計算相對於最小值和最大值的值的方法

我有這樣的代碼

public static int CalculateRelation(int input, int inputMin, int inputMax, int outputMin, int outputMax) 
{ 
    //Making sure bounderies arent broken... 
    if (input > inputMax) 
    { 
     input = inputMax; 
    } 
    if (input < inputMin) 
    { 
     input = inputMin; 
    } 
    //Return value in relation to min og max 
} 

所以FX,如果我做CalculateRelation(0,0,180,150,500)它將返回150 ..或者如果我沒有CalculateRelation(180,0,180,150,500)我會得到500 ..

所以輸出相數到Bounderies集...

希望這是有道理的

回答

0

我覺得很有道理(比例失調)

public static int CalculateRelation(int input, int inputMin, int inputMax, int outputMin, int outputMax) 
{ 
    //Making sure bounderies arent broken... 
    if (input > inputMax) 
    { 
     input = inputMax; 
    } 
    if (input < inputMin) 
    { 
     input = inputMin; 
    } 
    //Return value in relation to min og max 

    double position = (double)(input - inputMin)/(inputMax - inputMin); 

    int relativeValue = (int)(position * (outputMax - outputMin)) + outputMin); 

    return relativeValue; 
} 

我相信這將做到這一點,但沒有環境方便驗證。

+0

這似乎有訣竅,儘管有')relativeValue'計算結束。謝謝! –

0

有點像應該這樣做:

var inputRange = (double)inputMax - inputMin; 
var outputRange = (double)outputMax - outputMin; 
var diff = (double)input - inputMin; 
return (int)(diff/inputRangerange * outputRange + outputMin); 

但我沒有真正測試過它。

0
long result = input - inputMin; 
result *= outputMax - outputMin; 
result /= inputMax - inputMin; 
result += outputMin; 

請注意,根據此處的範圍,您可能會在乘法上溢出。您可以通過預先計算比例因子作爲雙倍來避免這種情況。

double scale = (double)(outputMax - outputMin)/(double)(inputMax - inputMin); 

INT結果= outputMin +(INT)((輸入 - inputMin)*比例)

相關問題