C# 将介于0和1之间的值规格化为给定的最小值和最大值

C# 将介于0和1之间的值规格化为给定的最小值和最大值,c#,math,C#,Math,我在处理操纵杆的俯仰 该节距可以在0(全部向下)和1(全部向上)之间变化。 节距为0.5表示操纵杆处于中间位置 我想找到一个公式,将这个音高“映射”到给定的最小值和最大值 公式会告诉我 - that a joystick pitch value of 0 would correspond to a given minimum (let's say -20) - that a joystick pitch value of 1 would correspond to a given maximu

我在处理操纵杆的俯仰

该节距可以在0(全部向下)和1(全部向上)之间变化。 节距为0.5表示操纵杆处于中间位置

我想找到一个公式,将这个音高“映射”到给定的最小值和最大值

公式会告诉我

- that a joystick pitch value of 0 would correspond to a given minimum (let's say -20) 
- that a joystick pitch value of 1 would correspond to a given maximum (let's say 20)
- that a joystick pitch value of 0.5 would correspond to 0 (as it's in the middle of minimum and maximum
我昏厥了,我找不到解这个谜的公式

谢谢您的帮助。

(最大-最小)*value+min
如果
value
在范围
[0,1]
中,则应将其映射到范围
[min,max]
。实际上,可能存在一些问题,具体取决于编程语言†和值,例如,如果
min
max
是有符号整数类型的最小值和最大值,则无法计算
max-min
,而不会在同一类型中产生溢出。对所有类型使用浮点类型可能是最安全的


†当我回答时,问题没有用任何语言标记,现在用C标记,我不是特别流利。

这通常被称为“地图范围”方程/函数。许多图形库都将此作为库的标准部分,因为它的使用非常普遍

Rosetta代码在每种主要语言中都有实现

是:


这很简单,只要取
max
min
之间距离的比例,然后加上
min

public double Range(double val, double min, double max)
        =>  min + val * (max - min);
用法示例:

Range(0.0, -20, 20)
Range(0.5, -20, 20)
Range(1.0, -20, 20)
输出

-20
0
20

非常好,没有任何开销,谢谢。
-20
0
20