我正在编程一个旋钮,该旋钮的位置由弧数定义。
我正在寻找一种方法将此弧数转换为代表温度的数字。
弧数的最小值为1.3,最大值为1.7。
1.3需要等于40和1.7需要等于99。
这可能吗?
答案 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