数学算法/函数将此数字转换为40?

时间:2010-06-24 00:39:44

标签: math

我正在编程一个旋钮,该旋钮的位置由弧数定义。

我正在寻找一种方法将此弧数转换为代表温度的数字。

弧数的最小值为1.3,最大值为1.7。

1.3需要等于40和1.7需要等于99。

这可能吗?

6 个答案:

答案 0 :(得分:7)

如果是线性的,您可以使用以下公式来允许任何最小值和最大值:

from_min = -1.3
from_max = 1.7
to_min = 40
to_max = 99
from = <whatever value you want to convert>
to = (from - from_min) * (to_max - to_min) / (from_max - from_min) + to_min

* (to_max - to_min) / (from_max - from_min)位将范围从from范围缩放到to范围。在找到from_min范围内的正确点之后,先减去to_min并添加to

示例,首先是原文:

(1.3..1.7) -> (40..99)
to = (from - from_min) * (to_max - to_min) / (from_max - from_min) + to_min
   = (from - 1.3)      * 59                / 0.4                   + 40
   = (from - 1.3) * 147.5 + 40 (same as Ignacio)
   = from * 147.5 - 151.75     (same as Zebediah using expansion)

然后使用-1.3作为你的评论中提到的下限:

(-1.3..1.7) -> (40..99)
to = (from - from_min) * (to_max - to_min) / (from_max - from_min) + to_min
   = (from - -1.3)      * 59                / 3                    + 40
   = (from + 1.3) * 19.67 + 40

这个答案(以及迄今为止的所有其他答案)都假设它一个线性函数。根据你在问题中使用像“arc”和“knob”这样的词语,这并不清楚。如果事实证明线性不够,你可能需要一些三角函数(正弦,余弦等)。

答案 1 :(得分:4)

(n - 1.3) * 147.5 + 40

答案 2 :(得分:3)

当然,只需要一条线就可以了。

在这种情况下,output = 147.5*input-151.75

答案 3 :(得分:1)

这里简单的线性代数小展示。

两个变量是旋钮位置(x)和一些常数(p)。

然后

这两个方程式
1.3x + p = 40
1.7x + p = 99

以x的形式求解p的第一个等式:

p = 40 - 1.3x

如果我们将p的新定义放入第二个等式,我们可以简化为:

1.7x + 40 - 1.3x = 99
.4x = 59
x = 147.5

然后你可以用任何一个方程求解p。使用第一个等式:

p = 40 -1.3*147.5 = -151.75

所以你从旋钮位置得到温度的最终方程应该是

temp = 147.5*knobPosition - 151.75

答案 4 :(得分:1)

这实际上是一个简单的代数问题,不需要线性代数。

def scale_knob( knob_input ):

  knob_low = -1.3
  knob_high = 1.7
  knob_range = knob_high - knob_low   # 1.7 - -1.3 = 3.0.

  out_low = 40.0
  out_high = 99.0
  out_range = out_high - out_low      # 99.0 - 40.0 = 59.0

  return ( knob_input - knob_low ) * ( out_range / knob_range ) + out_low
  # scaled = ( input - (-1.3) ) * ( 59 / 3.0 ) + 40.0

答案 5 :(得分:1)

由于我错过了简单的解决方案,这是另一种思考方式:

let delta(q) denote the rate of change of some quantity q.

那么您的相关费率是

delta(output)/delta(input) = (99 - 40) / (1.7 - 1.3) = 59/0.4 = 147.5

从而

delta(output) = 147.5 * delta(input). 

假设此功能连续(意味着您可以对旋钮进行任意微小的调整而不是离散点击),我们可以将两个方面集成在一起:

output = 147.5 * input + some_constant

因为我们知道当输入为1.3时输出为40,我们有

40 = 147.5 * (1.3) + some_constant

因此

some_constant = 40 - 147.5 * 1.3 = -151.75

因此你想要的等式是

output = 147.5 * input - 151.75