У меня есть функция, которая нормализует любой диапазон номеров до нового диапазона.
Например
[123,456]
до [0,10]
или
[-50,50]
до [-1,1]
Мне нужна помощь в смещении средней точки нового диапазона.
Я использую это для ползунка с графическим интерфейсом, который имеет диапазон [-100,100]
, но контролирует значение [-2,2]
.
Значение по умолчанию для GUI Slider - 0
, но значение по умолчанию - 1
(нет).
Моя программа представляет собой графический интерфейс для интерфейса командной строки, и я не могу изменить значение этой программы по умолчанию на 0
.
![slider](https://i.stack.imgur.com/98FD7.png)
Slider
-100 --------------||-------------- 100
0
Value
-2 | | | -1 | | 0| | | 1 | | 2
Shifted Value
-2 | | -1 | | 0 | 1| | | | | | 2
Нормализация
https://dotnetfiddle.net/42jHvM
// Normalize Function
public static double Normalize(double val, double valmin, double valmax, double min, double max, double midpoint)
{
return (((val - valmin) / (valmax - valmin)) * (max - min)) + min;
}
double output = Normalize( 0, // slider input
-100, // input min
100, // input max
-2, // normalize min
2, // normalize max
1 // middle point
);
Сдвиг средней точки
В моем примере я использую [-100,100]
, преобразованный в [-2,2]
.
Средняя точка input
[-100,100]
равна 0
.
Но мне нужно, чтобы output
[-2,2]
имел среднюю точку 1
вместо 0
.
Таким образом, оно будет наклонено, медленнее к -2
, быстрее к 2
.
Пример Я сделал в фотошопе визуализацию смещения средней точки с помощью градиента.
![shift](https://i.stack.imgur.com/e0v0S.jpg)
Облегчение
Я пытался использовать Ease Out Tween , чтобы сместить среднюю точку, но я не знаю, какие значения использовать.
Пример вывода должен быть Min: -2
, Mid: 1
, Max: 2
.
https://dotnetfiddle.net/nfNlBC
Используется:
//t: current time
//b: start value
//c: change in value
//d: duration
После смещения средней точки:
Ввод -100
должен вывести -2
.
Ввод -50
должен выводить -0.50
?
Ввод 0
должен выдать 1
.
Ввод 50
должен выводить 1.75
?
Ввод 100
должен выдавать 2
.
До
-100 | -50 | -25 | 0 | 25 | 50 | 100
-2 | -1 | -0.5 | 0 | 0.5 | 1 | 2
После approximated
-100 | -50 | -25 | 0 | 25 | 50 | 100
-2 |-0.50 | 0.25 | 1 | 1.25 | 1.75 | 2
Вопрос
Как я могу изменить функцию Normalize или запустить ее вывод через новую функцию Shift / Easing, чтобы установить новую среднюю точку диапазона и перенастроить числа?