计算相对于min&的值的方法。最大值

时间:2014-02-27 23:45:43

标签: c# math

我正在尝试制作一个可用于计算值的通用方法,与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集相关的数字......

希望这是有道理的

3 个答案:

答案 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;
}

我相信这会做到这一点,但是没有方便的环境来验证。