- Определите общий диапазон, по которому может перемещаться ось физического джойстика.Вы задали минимальное и максимальное значения от -32768 до 32767 для общего диапазона 65535.
- Определите общий диапазон пикселей, которые вы хотите, чтобы виртуальный джойстик (vJoy) мог перемещаться.Допустим, он начинается в позиции пикселя 0, а его минимальное и максимальное допустимые значения равны -100 и 100. Это дает нам общий диапазон 200.
- Теперь выясним, сколько единиц должен пройти физический джойстик.за виртуальное движение джойстика.Мы получаем это путем деления: 65535/200 (диапазон физического джойстика / диапазон виртуального джойстика), что дает нам 327,675.Это число в гипотетических терминах будет означать, что «на каждый пиксель виртуального джойстика перемещается физический джойстик 327,675».Давайте присвоим это значение переменной «axis_per_pixel».
- Наконец, если мы знаем, что значение оси значений изменилось на величину «а» (из вашего примера 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;
}