Данный пост не претендует на истину, всё описанное очень субъективно.
Купив в своё время х52 начал читать форумы и узнал о "зловещей" нелинейности двух главных цифровых осей. Конечно-же я тоже переделал свой х52. Но результатом я лично остался недоволен, почему? Убрав нелинейность, я получил относительно неточный джой в центре, мне даже пришлось выставлять мёртвые зоны, чего раньше я не делал. Более того, мне пришлось накручивать кривые отклика в настройках управления (я играю в ДКС Мире, как и что в других вообще без понятия). Иными словами я, убрав аппаратную нелинейность, потом добавил её программно, тогда я себе и задал вопрос – а зачем я это всё делал? Ну да ладно сделал и ладно.
Затем, общаясь на форуме, зашёл у меня спор с другим обладателем х52 по поводу всё той же нелинейности. Говорю ему, если у тебя новый джой на гарантии, то необязательно его разбирать, можно просто выкрутить кривую отклика в обратную сторону и получишь прямой отклик на РУСе. На что он со мной не согласился, мол, так а квадрат в джой-тестере как рисовался, так и рисуется. Ну, в общем, у меня и у него не было желания доказывать свою правоту, каждый остался при своём.
Меня эта тема не интересовала, меня интересовала тема дрожания нецифровых осей и я её успешно решил. http://www.sukhoi.ru/forum/showthrea...31#post2012131
А потом в один день мне в голову пришла мысль, а что если с помощью этого-же метода убрать нелинейность? Суть метода в принципе практически ничем не отличается от настройки кривой отклика в самой игре, НО теперь можно будет рисовать заветные круги в джой-тестере. И если человек не хочет разбирать свой джой, или он по своим «религиозным» убеждения уверен, что самое главное это круги в джойтестере, то этот метод для него.
В общем ближе к делу. Ссылки на программы и методы их установки я давал в своём посте про дрожание осей.
А здесь я опишу скрипт, который убирает нелинейность.
//**********************
var.x = joystick1.x //читаем в переменную х состояние оси х
var.y = joystick1.y //читаем в переменную y состояние оси y
//**********************
if var.x<0 then
var.x1 = |var.x|
var.x1 = sqrt(var.x1)
var.x1 *=-1
ppjoy.Analog0 = Smooth(var.x1,10,0.0001)
else
var.x1 = sqrt(var.x)
ppjoy.Analog0 = Smooth(var.x1,10,0.0001)
end if
//**********************
if var.y<0 then
var.y1 = |var.y|
var.y1 = sqrt(var.y1)
var.y1 *=-1
ppjoy.Analog1 = Smooth(var.y1,10,0.0001)
else
var.y1 = sqrt(var.y)
ppjoy.Analog1 = Smooth(var.y1,10,0.0001)
end if
//**********************

Дам некоторый комментарий. Первая нелинейная ф-ция которая мне вспомнилась это квадрат числа, но поскольку значения оси принимают значения от -1 до 1 она сама собой отпала. Следующей была куб. Чтобы из нелинейной ф-ции х в кубе получить линейную мне надо был корень в степени 3, но у меня почему-то не получилось заставить работать ф-цию x в степени y, поэтому я махнул рукой и взял обыкновенный квадратный корень, вот тут и возникла проблема с чётностью, поэтому я проверяю состояние оси и если она меньше 0 то я беру корень из модуля оси а уже затем умножаю его на -1.
Ну и легенькое сглаживание при записи значения в ось виртуального джоя, но это совсем уже индивидуально, многие этого не любят категорически, можно убрать при желании.
В результате получил такой результат:
До
Нажмите на изображение для увеличения. 

Название:	NLA.png 
Просмотров:	234 
Размер:	18.5 Кб 
ID:	170641
После
Нажмите на изображение для увеличения. 

Название:	LA.png 
Просмотров:	268 
Размер:	19.6 Кб 
ID:	170642
Надеюсь кому-то пригодиться!