1

わかりました、これはおそらく答えるのが非常に簡単な質問になるでしょう. ここ数年、対数を扱う数学の授業がなかったので、申し訳ありません。そのため、左のジョイスティックで画面上のマウスを制御するために使用している USB コントローラーがあります。これが現在どのように機能するかは、コントローラーがジョイスティックを方向にどれだけ押したかに応じて、0.00 から 1.00 の間の double を返すことです (0.00 は中央、1.00 は完全に押し込まれます)。これを使用して、返された値に特定の速度 (返された倍速 * 速度) を掛けて、マウスの移動速度を調整しています。これにより、線形速度が得られます。しかし、マウスの精度と画面上のクリックの目的のために、もっと対数的にしたいので、かろうじて押すと本当に遅いので、ジョイスティックを遠くに動かすと、速度は対数的に増加します。こうすることで、画面上を移動する速度が速くなり、ゆっくりと移動するときの感度も向上します。だから、私はそれがかなり単純だと確信しているので、式の助けが必要です. また、私は Java で作業しています。現在、私の式は次のとおりです。

double value (value given by controller)
int speed = 25;
value += value * speed;

次に、これを使用してマウスを移動します。ありがとう、ブレイデン

4

3 に答える 3

2

私はあなたが指数関数を意味していたと思います。指数関数はhttp://hotmath.com/images/gt/lessons/genericalg1/exponential_graph.gifのようになります: が多いvalueほど、導関数は大きくなります (speedの同じ変化に対してより多く増加しますvalue)。

double value = ...;
int base = 25;
value = java.lang.Math.pow(base, value);

が完全な形で必要かどうか、または最初java.lang.Mathにインポートする必要があるかどうかは不明です。java.lang.Math私は Java プログラマーではありません。

于 2010-07-29T17:09:46.683 に答える
1

私は MvanGeest に同意します。指数関数式が必要だと思います。そうすれば、距離が短いと小さくなり、距離が長くなると非常に大きくなります。

マウスの速度の値が速いか遅いかはわかりませんが、次のようなことができます

double value (value given by controller);
int speed (maximum speed value);
value = Math.pow(speed, value);

より広い範囲の速度を作成するために、値を 2* (コントローラーが提供するものは何でも) のようなものにすることもできます。

于 2010-07-29T17:11:07.930 に答える
0

何かのようなもの:

f(value) = value * MAXSPEED * Math.Pow (base, 1 - value)

f(0) = 0 // no movement
f(1) = MAXSPEED // maximum movement when joystick is full throttle

すべての値が範囲内に含まれている必要があります。この場合の基数は、1 より大きい任意の値にすることができます。

于 2010-07-29T17:16:36.037 に答える