对数鼠标移动

时间:2010-07-29 16:57:09

标签: java mouse logarithm

好吧,这可能是一个非常简单的问题。我几年没有处理对数的数学课,所以我道歉。所以我有一个USB控制器,用于通过左操纵杆控制屏幕上的鼠标。现在,它如何工作是控制器返回0.00和1.00之间的双倍取决于操纵杆在方向上的推动距离(0.00中心,1.00完全推动)。我正在使用它来通过将返回值乘以给定速度(返回的双倍*速度)来调整鼠标移动的速度。这给了我线性速度。但是为了鼠标的准确性和在屏幕上点击的东西,我希望它更加对数,因为它几乎没有推动时非常慢,然后当你将操纵杆移动得更远时,速度会以对数方式增加。这样,您可以在屏幕上移动时获得良好的速度,同时在缓慢移动时也具有良好的灵敏度。所以我只需要帮助配方,因为我确信这很简单。另外,我在Java工作。 现在我的公式是:

double value (value given by controller)
int speed = 25;
value += value * speed;
然后我用它来移动鼠标。 谢谢, 布雷登

3 个答案:

答案 0 :(得分:2)

我认为你的意思是指数级的。指数函数看起来像http://hotmath.com/images/gt/lessons/genericalg1/exponential_graph.gifvalue越多,导数越大(speed中相同变化的value越多。

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

不确定完整格式是否需要java.lang.Math,或者您是否需要先导入java.lang.Math。我不是Java程序员。

答案 1 :(得分:1)

我同意MvanGeest,我想你想要一个指数公式。这样它的距离很小,距离很远,而且距离很大。

我不确定鼠标速度值的快或慢,但你可以做类似的事情

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

您还可以将值设置为2 *(无论控制器提供什么),以获得更宽的速度范围。

答案 2 :(得分: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

所有值都应涵盖在范围内。在这种情况下,Base可以是大于1的任何值。