如何编写参数映射方程

时间:2016-09-25 08:08:14

标签: math

我想知道编写映射方程的数学上正确的方法是什么。我有一个滑块范围(0,100),映射到另一个值范围(v_min,v_max)。有没有标准的写作方式而不是:

v = slider_value *(v_max - v_min)/(100 - 0)

问题在于是否存在将映射(a,b)写入(c,d)的标准数学方法。它适用于纸质文档而不是编码本身。

由于

3 个答案:

答案 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来压制警告)

这基本上只是构建了另一个答案中给出的表达式,但如果超出范围,这将发出警告。