Java 对数鼠标运动

Java 对数鼠标运动,java,mouse,logarithm,Java,Mouse,Logarithm,好吧,这可能是一个非常简单的问题。我已经有几年没有上过对数的数学课了,所以我道歉。所以我有一个USB控制器,我用它来控制屏幕上的鼠标和左操纵杆。现在的工作原理是,控制器返回0.00和1.00之间的双精度值,这取决于将操纵杆向该方向推多远(0.00居中,1.00推到底)。我用它来调整鼠标移动的速度,方法是将返回的值乘以给定的速度(返回的double*speed)。这给了我一个线性速度。但是为了鼠标的精确性和点击屏幕上的东西,我希望它是对数的,因为它在几乎不推的时候非常慢,然后当你进一步移动操纵杆时

好吧,这可能是一个非常简单的问题。我已经有几年没有上过对数的数学课了,所以我道歉。所以我有一个USB控制器,我用它来控制屏幕上的鼠标和左操纵杆。现在的工作原理是,控制器返回0.00和1.00之间的双精度值,这取决于将操纵杆向该方向推多远(0.00居中,1.00推到底)。我用它来调整鼠标移动的速度,方法是将返回的值乘以给定的速度(返回的double*speed)。这给了我一个线性速度。但是为了鼠标的精确性和点击屏幕上的东西,我希望它是对数的,因为它在几乎不推的时候非常慢,然后当你进一步移动操纵杆时,速度以对数增加。这样,您可以获得良好的速度在屏幕上移动,同时也有良好的灵敏度时,移动缓慢。所以我需要的是公式方面的帮助,因为我相信它很简单。另外,我在Java工作。 现在我的公式是:

double value (value given by controller)
int speed = 25;
value += value * speed;
然后我用这个来移动鼠标。 谢谢
布雷登我想你是指指数型的。指数函数如下所示:
值越大,导数越大(对于
值的相同变化,
速度越快)


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

我同意MvanGeest,我想你需要一个指数公式。这样的话,距离小的时候它就小了,距离大的时候它就大了

我不确定什么鼠标速度值是快还是慢,但你可以这样做

double value (value given by controller);
int speed (maximum speed value);
value = Math.pow(speed, value);
您还可以将该值设置为2*(控制器提供的任何值),以获得更宽的速度范围。

类似于:

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的任何值。

我想你指的是指数……不是真的?:)指数意味着更高值的加速。我想他希望加速度处于刻度的较低的en,这意味着使用对数函数。他说“当几乎不推动时,它真的很慢”。。。不过,你没有说任何关于日志/经验差异的事情。嗯,是的,你可能是对的:)真的很好的问题,上票。可能会使用一些段落。或4*,等等。任何数字都会给您一个足够大的范围。当值为0-x^0=1而不是0时,这会导致一些小的移动。你的答案是什么意思?难道Math.pow不能只接受2个参数吗?我还使用了你的想法,得到了*2的值,给了我一个很好的速度范围。非常感谢你!不熟悉Java,但基本上您可以使用任何底座。当操纵杆居中时,不会提供零移动!同意,可能需要单独检查。这正是我需要的,非常感谢。我想我甚至没有意识到我在要求什么。哈哈。但再次感谢你:)。
f(value) = value * MAXSPEED * Math.Pow (base, 1 - value)

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