-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. つまり、2 つの点をプラグインして、m と b を未知数とする 2 つの方程式を取得し、m と b を解きます。

于 2013-10-24T23:50:04.013 に答える
1

(これが機能する理由の詳細な説明については、こちらの回答を参照してください。)

これはコメントするには少し長すぎました。2 つのスケールの方向が一致するかどうかは問題ではありませんが、あなたのものはそうです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代わりに最速の速度に対応したい場合は、単に反転b0して次のようにしb1ます。

>>> 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 に答える