2014-02-27 106 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)*比例)

相关问题