-1

我有一个用户输入,可以有一个从 1 到 50 的整数值。
让我们想象一下,我有一个转动的针,就像它是一个时钟。
该转弯的速度取决于它每帧移动的弧度增量。
所以,如果我的速度为 PI/2,针每帧转半圈。
我得出的结论是,可能的速度应该在 PI/8(最快)和 PI/256(最慢)之间。

我正在尝试构建一种算法,将用户输入的 1(最慢)和 50(最快)转换为 PI/256 和 PI/8(最大值 50 是任意的,可以是其他值);显然之间的数字应该是反向对应的。

我需要的是一个像这样的公式:

delta = userInput * (.............)

我已经尝试了几个小时,如果有人可以帮助我,将不胜感激。

4

2 回答 2

2

求解直线方程:y = m * x + b。即,插入您的两个点以得到两个方程,其中 m 和 b 作为未知数,然后求解 m 和 b。

于 2013-10-24T23:50:04.013 回答
1

(有关此工作原理的更详细说明,请参见我的答案。)

这对于评论来说有点太长了。两个尺度是否一致并不重要,尽管你:你说1(最慢)对应pi/256(最慢),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对应最快的速度,那么只需翻转b0b1

>>> a0, a1 = 1., 50.
>>> b0, b1 = pi/8, pi/256
>>> def rescale(x): 
...     return ((x-a0)/(a1-a0)) * (b1-b0) + b0
... 
>>> rescale(1)
0.39269908169872414
>>> rescale(50)
0.012271846303085143

该公式继续适用。

于 2013-10-24T23:54:20.563 回答