2010-07-29 4 views
1

좋아요, 아마도 이것은 대답하기 쉬운 간단한 질문 일 것입니다. 나는 수학 수업을 몇 년 동안 로그를 다루지 않았기 때문에 사과합니다. 그래서 왼쪽의 조이스틱으로 화면의 마우스를 제어하는 ​​데 사용하는 USB 컨트롤러가 있습니다. 이제 컨트롤러가 조이스틱을 방향으로 밀 때까지의 거리 (0.00 센터, 1.00이 끝까지 밀린 상태)에 따라 0.00과 1.00 사이의 배수를 반환합니다. 반환 된 값에 주어진 속도 (double * speed 반환)를 곱하여 마우스 이동 속도를 조정하려면이 방법을 사용합니다. 이것은 나에게 선형 속도를 준다. 그러나 마우스의 정확성과 화면의 클릭을 위해 로그를 더 많이 사용하고 싶습니다. 간신히 움직이면 속도가 느려지고 조이스틱을 더 멀리 움직이면 속도가 대수적으로 증가합니다. 그렇게하면 화면을 가로 질러 움직일 때 좋은 속도를 얻을 수있을뿐만 아니라 천천히 움직일 때 감도가 좋습니다. 그래서 공식으로 도움이 필요합니다. 꽤 간단합니다. 또한 Java로 작업하고 있습니다. 는 지금 내 공식은 : 다음 마우스를 이동하려면이 옵션을 사용대수 쥐 이동

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

. 고마워, Brayden

+2

나는 지수 함수라고 가정합니다. – MvanGeest

+0

실제로는 아닙니까? :) 지수는 높은 값에 대한 가속을 의미합니다. 나는 그가 가속도가 스케일의 낮은 en에 있기를 원한다고 생각합니다. 이것은 로그 함수를 사용하는 것을 의미합니다. – cwap

+0

그는 "간신히 밀었을 때 정말 느리다"고 말합니다 ... 그러나 로그/엑스포 차이에 대해서는 말하지 않습니다. – MvanGeest

답변

2

나는 당신이 지수 적이라고 생각합니다. 지수 함수는 http://hotmath.com/images/gt/lessons/genericalg1/exponential_graph.gif과 같습니다 : value이 더 많을수록 미분은 더 커집니다 (value에서 같은 변경으로 인해 더 많은 숫자가 증가합니다). java.lang.Math는 전체 형태 여부 필요한 경우

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

확실하지 먼저 java.lang.Math를 가져와야합니다. 나는 자바 프로그래머가 아니다.

+0

은 조이스틱이 중심에있을 때 제로 움직임을주지 않습니다! – cristobalito

+0

동의, 어쩌면 별도로 확인해야 할 수도 있습니다. – MvanGeest

+0

이것은 정확히 내가 실제로 필요로했던 것입니다, 대단히 감사합니다. 나는 내가 무엇을 요구하고 있는지조차 몰랐다. 하하. 하지만 다시 한번 감사드립니다. :) – Brayden

1

나는 MvanGeest에 동의하며, 나는 지수식을 원한다고 생각합니다. 그렇게하면 거리가 작아지고 거리가 멀어지면 커집니다.

내가 속도 값이 빠르게 또는 느리게 무엇 마우스 모르겠지만, 당신은 또한이 같은 값 뭔가를 만들 수

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

같은 뭔가를 할 수 * (컨트롤러가 당신을 제공 무엇이든)로 만들려면 더 넓은 범위의 속도. 같은

+0

또는 4 * 등 어떤 숫자로든 충분히 큰 범위를 제공합니다. – Eric

+0

값이 0 일 때 약간의 작은 움직임이 발생합니다. x^0 = 1이 아니라 0 – cristobalito

+0

이 참입니다. 그냥 값 = 수학.pow (speed, value) - 1 @cristobalito : 답은 무엇을 의미합니까? Math.pow는 2 개의 인수 만 취할 수 있습니까? – Eric

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보다 큰 값이 될 수 있습니다.

관련 문제