我的用户输入的整数值为1到50 我想,让我想象一下转动的针,就像它是一个钟 该转弯的速度取决于每帧移动的弧度增量 所以,如果我有一个PI / 2的速度,针每一帧转半圈 我得出结论,可能的速度应该在PI / 8(最快)和PI / 256(最慢)之间。
我正在尝试构建一种算法,将1(最慢)和50(最快)的用户输入转换为PI / 256和PI / 8(最大值50是任意的,可以是其他的);显然,两者之间的数字应该是反向对应的。
我需要的是一个类似的公式:
delta = userInput * (.............)
我已经尝试了几个小时,如果有人能帮助我,我将非常感激。
答案 0 :(得分:2)
求解线方程:y = m * x + b。即,插入两点得到两个方程式,其中m和b为未知数,然后求解m和b。
答案 1 :(得分:1)
(请参阅我的回答here以获得有关其工作原理的更详细说明。)
这对于评论来说只是稍微太长了。两个尺度是否在方向上是一致的并不重要,尽管你的做:你说1
(最慢)对应pi/256
(最慢),{{1 (最快)对应50
(最快)。 pi/8
和1 < 50
。
所以,如果这是正确的顺序:
pi/256 < pi/8
>>> a0, a1 = 1., 50.
>>> b0, b1 = pi/256, pi/8
>>> def rescale(x):
... return ((x-a0)/(a1-a0)) * (b1-b0) + b0
...
>>> rescale(1)
0.01227184630308513
>>> rescale(1) == pi/256
True
>>>
>>> rescale(50)
0.39269908169872414
>>> rescale(50) == pi/8
True
靠近中间的地方:
25
如果您希望>>> rescale(25)
0.198603553435643
代表最快的速度,那么只需翻转1
和b0
:
b1
该公式继续适用。