Я работаю над небольшой программой С#, которая использует xinput для чтения палочки большого пальца xbox 360.
у меня нет проблем с чтением координат и нормализацией значений, поэтому я получаю поплавок между -1 и +1 для направлений X и Y. проблема в том, что сама палка физически ограничена кругом, и в моем случае я бы хотел "растянуть" координаты, чтобы она стала больше квадрата, чем круга.
причина в том, что каждое направление управляет двигателем, и если я перемещаю палку, например, верхнюю правую, я бы хотел, чтобы оба X и Y становились 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 и малый масштаб соответственно, что также значительно не снижает логистику.