преобразование координат xinput в квадрат

1

Я работаю над небольшой программой С#, которая использует xinput для чтения палочки большого пальца xbox 360.

у меня нет проблем с чтением координат и нормализацией значений, поэтому я получаю поплавок между -1 и +1 для направлений X и Y. проблема в том, что сама палка физически ограничена кругом, и в моем случае я бы хотел "растянуть" координаты, чтобы она стала больше квадрата, чем круга.

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

любой совет?

Теги:
math
coordinates
xinput

1 ответ

1
Лучший ответ

Поэтому вы хотите, чтобы точка на круге радиуса r отображалась в точку на квадрате радиуса r на том же луче через начало координат. Для достижения этой цели вам нужно вычислить радиус, используя обычную формулу

r = sqrt(x*x+y*y)

а затем от этого масштабный коэффициент

f = r / max ( abs(x), abs(y) )

и в конце заменить x на f * x и y на f * y.

Можно варьировать это вычисление, заметив, что фактор

f = sqrt ( 1 + (x*x)/(y*y) )

если abs(y) > abs(x) и

f = sqrt ( 1 + (y*y)/(x*x) )

в противоположном случае. Или, заметив, что наибольшая координата заменяется на r и малый масштаб соответственно, что также значительно не снижает логистику.

  • 0
    спасибо, что помогло. теперь мне просто нужно выяснить, почему моя нормализация иногда делает x и y больше 1. Держу пари, у меня есть некоторые другие ошибки, время для небольшой отладки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню