Scaleexp: scaling values exponentially / экспоненциальное преобразование диапазона значений

Jan 12, 2013 00:08

This small patch works similar like scale object, but exponential transformation is made quite better. Now the output values are evenly distributed within the defined range.
The convenience of this patch is that the transfer exponent is defined by two points (their coordinates bear on the input and output ranges) and degree of curvature (power base). But with any power base the exponent will pass through the defined points. Mathematical rationale is hereinafter.

The same as scale, scaleexp doesn't trunkate the range out of defined points, and if you will enter a value outside of the defined input range you will get some output value outside of the defined output range, but it will be calculated  by the same formula.

Scaleexp is simple in use and very useful for sensitivity correction of some input devices like volume pedal etc.

Маленький патч работает так же, как и scale, но экспоненциальное преобразование сделано существенно лучше. Теперь значения выходного диапазона распределяются равномерно между заданными крайними значениями.
Удобство в том, что экспонента задаётся двумя точками, координаты которых отражают заданные границы входного и выходного диапазона, и степенью кривизны (основание степени). Но при любом основании экспонента будет проходить по заданным точкам. Математическое обоснование - ниже.

Так же, как и объект scale, scaleexp не обрезает диапазон за пределами заданных крайних значений, и если ввести число за пределами входного диапазона, то в результате будет получено некое число за пределами выходного диапазона, но вычисленное по той же формуле.

Scaleexp прост в использовании и весьма полезен для регулировки чувствительности разных манипуляторов типа педалей громкости и т. п.

Download Scaleexp




Help / Справка



How It Works

X - input
X0 - bottom value; X1 - top value of the input range
Y - output
Y0 - bottom value; Y1 - top value of the output range
a - "curving" factor (power base)

the full expression is
c aX-X0 - c + Y0 = Y             (1)

let
x = X-X0; x' = X1-X0
y = Y-Y0; y' = Y1-Y0
after removing offsets X0, Y0 it becomes as follows

c ax - c = y                              (2)

c is calculated as:
c = y' / (ax' - 1)                        (3)

if a = 1, the expression (2) doesn't work:
c - c = y :(
so we gswitch to line function x = y

Как оно работает

X - входное значение
X0 - нижний предел входного диапазона; X1 - верхний предел входного диапазона
Y - выходное значение
Y0 - нижний предел выходного диапазона; Y1 - верхний предел выходного диапазона
a - «кривизна» (основание степени)

полное выражение:
c aX-X0 - c + Y0 = Y             (1)

пусть
x = X-X0; x' = X1-X0
y = Y-Y0; y' = Y1-Y0
если избавиться от «смещений» функции X0, Y0 (т. е. принять условную систему координат, началом которой является нижняя точка, как это изображено на графике itable), выражение приобретает следующий вид:

c ax - c = y                             (2)

c вычисляется так:
c = y' / (ax' - 1)                       (3)

если a = 1, выражение (2) не работает:
c - c = y :(
и в этом случае мы переключаемся объектом gswitch на линейную функцию x = y

.

mapping, max, Иллюстрации, bagatelles, *

Previous post Next post
Up