繁体   English   中英

相对于最小值和最大值的值的计算方法

[英]Method for calculating a value relative to min & max values

我正在尝试使我可以使用一种通用方法来计算与我定义的最大和最小值有关的值。

我有这个代码

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
}

因此,如果我执行CalculateRelation(0,0,180,150,500)则fx将返回150 ..或者如果我执行了CalculateRelation(180,0,180,150,500)则将获得500 ..

所以输出是相对于边界集的数字...

希望这有意义

这样的事情应该可以解决问题:

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

但是我还没有实际测试过。

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

请注意,根据此处的范围,乘法可能会溢出。 您可以通过将比例因子预先计算为两倍来避免这种情况。

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

int结果= outputMin +(int)((输入-inputMin)*标度)

我认为这是有道理的(比例偏移)

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

我相信这可以做到,但是没有方便验证的环境。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM