C# 将介于0和1之间的值规格化为给定的最小值和最大值
我在处理操纵杆的俯仰 该节距可以在0(全部向下)和1(全部向上)之间变化。 节距为0.5表示操纵杆处于中间位置 我想找到一个公式,将这个音高“映射”到给定的最小值和最大值 公式会告诉我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
- 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