我想知道编写映射方程的数学上正确的方法是什么。我有一个滑块范围(0,100),映射到另一个值范围(v_min,v_max)。有没有标准的写作方式而不是:
v = slider_value *(v_max - v_min)/(100 - 0)
问题在于是否存在将映射(a,b)写入(c,d)的标准数学方法。它适用于纸质文档而不是编码本身。
由于
答案 0 :(得分:1)
您必须添加v_min
才能获得正确的结果。
线性映射的更通用的公式是
v = v_min + (slider_value - slider_min) * (v_max - v_min) / (slider_max - slider_min)
请注意,对于给定的映射,Cf = (v_max - v_min) / (slider_max - slider_min)
已知常量,因此可以进行小幅优化以避免在每个步骤进行过多的计算:
v = v_min + (slider_value - slider_min) * Cf
答案 1 :(得分:1)
我认为您正在寻找的功能是Rescale
,因为这完全符合您的要求:
v = Rescale[slider_value, {0, 100}, {v_min, v_max}]
示例:
DynamicModule[{x = 0},
Column[{
Dynamic[x],
Dynamic[Rescale[x, {0, 100}, {-200, 300}]],
Slider[Dynamic[x], {0, 100}]
}]
]
答案 2 :(得分:0)
您可以使用Interpolation
Interpolation[{{slidermin,vmin},{slidermax,vmax}}]@sliderval
(您可能需要InterpolationOrder->1
来压制警告)
这基本上只是构建了另一个答案中给出的表达式,但如果超出范围,这将发出警告。