我正在尝试制作一个可用于计算值的通用方法,与max&我定义的最小值。
我有这段代码
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 :(得分:0)
这样的事情可以解决问题:
var inputRange = (double)inputMax - inputMin;
var outputRange = (double)outputMax - outputMin;
var diff = (double)input - inputMin;
return (int)(diff / inputRangerange * outputRange + outputMin);
但我实际上没有测试过它。
答案 1 :(得分:0)
long result = input - inputMin;
result *= outputMax - outputMin;
result /= inputMax - inputMin;
result += outputMin;
注意,根据此处的范围,乘法可能会溢出。您可以通过将比例因子预先计算为双倍来避免这种情况。
double scale = (double)(outputMax - outputMin)/(double)(inputMax - inputMin);
int result = outputMin +(int)((input - inputMin)* scale)
答案 2 :(得分: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;
}
我相信这会做到这一点,但是没有方便的环境来验证。