Переместить JoyStick в точных пикселях - PullRequest
0 голосов
/ 14 декабря 2018

Я работаю над проектом, в котором я хочу переместить виртуальный джойстик (vJoy) x количество пикселей.Однако я не могу найти метод преобразования пикселей в ось джойстика (Оси от -32768 до 32767).Пример может быть более полезным для объяснения:

Допустим, я хотел бы переместить 50 пикселей по оси x в данный момент времени в 100 миллисекунд, поэтому мне нужно было бы найти точное усилие оси между -32768 до32767, который переместит объект на 50 пикселей за заданное время.

Поскольку мне требуется большая точность в движении, я нахожусь в тупике на методе, который выполнил бы эту задачу.Любая помощь приветствуется

Спасибо

1 Ответ

0 голосов
/ 14 декабря 2018
  1. Определите общий диапазон, по которому может перемещаться ось физического джойстика.Вы задали минимальное и максимальное значения от -32768 до 32767 для общего диапазона 65535.
  2. Определите общий диапазон пикселей, которые вы хотите, чтобы виртуальный джойстик (vJoy) мог перемещаться.Допустим, он начинается в позиции пикселя 0, а его минимальное и максимальное допустимые значения равны -100 и 100. Это дает нам общий диапазон 200.
  3. Теперь выясним, сколько единиц должен пройти физический джойстик.за виртуальное движение джойстика.Мы получаем это путем деления: 65535/200 (диапазон физического джойстика / диапазон виртуального джойстика), что дает нам 327,675.Это число в гипотетических терминах будет означать, что «на каждый пиксель виртуального джойстика перемещается физический джойстик 327,675».Давайте присвоим это значение переменной «axis_per_pixel».
  4. Наконец, если мы знаем, что значение оси значений изменилось на величину «а» (из вашего примера 50), мы можем определить, насколько значение физического джойстика нужно изменить, умножив: a * axis_per_pixel.В нашем примере это будет 50 * 327,675, то есть 16383,75.Таким образом, когда позиция виртуального джойстика увеличивается на 50, позиция физического джойстика должна увеличиться на 16383,75 для соответствия.

Я приведу пример кода.Вы пометили это как Python, но я собираюсь ответить на JavaScript, потому что мой Python все еще немного груб.Надеюсь, это достаточно ясно.

function getPositionIncrease(
  minPixelValue, // lowest allowed pixel position, ie -100
  maxPixelValue, // highest allowed pixel position, ie 100
  minAxisValue, // lowest allowed axis value, ie -32768
  maxAxisValue, // highest allowed axis value, ie 32767,
  pixelDelta, // what amount the pixel position has changed by
) {
  const distPixel = maxPixelValue - minPixelValue;
  const distAxis = maxAxisValue - minAxisValue;
  const axisPerPixel = distAxis / distPixel;
  const axisDelta = pixelDelta * axisPerPixel; // how much the physical axis needs to change to match
  return axisDelta;
}
...