Переопределение стоимости

Обработка имеет большую функцию, которую я использую все время:

map(value, low1, high1, low2, high2)

http://processing.org/reference/map_.html

Он переназначает value (который имеет ожидаемый диапазон от low1 до high1) в целевой диапазон от low2 до high2).

Я хочу понять математику за ней, чтобы я мог использовать ее на других языках. Кто-нибудь хочет бросить мне кость и помочь мне ее перестроить? Я понимаю, что это ерп, который был перемасштабирован и снова смещен... чувствуя, что мозг мертв сегодня утром.

Ответ 1

Из вашего описания, это должно быть сделано, правильно?

low2 + (value - low1) * (high2 - low2) / (high1 - low1)

Найдите, как далеко вы попадете в первый диапазон, масштабируйте это расстояние на отношение размеров диапазонов и насколько далеко вы должны находиться во втором диапазоне.

Ответ 2

Я хотел бы добавить, что иногда полезно найти коэффициент между low1 и high1, чтобы вы могли модулировать его кривой, прежде чем использовать коэффициент как LERP t.

Итак, t = (значение-low1)/(high1-low1), чтобы получить относительное положение значения в строке low1 до high1.

Затем вы можете модулировать t с помощью некоторого фильтра кривой, например, гамма, смещение, коэффициент усиления и т.д. Кроме того, зажмите t между 0 и 1, если вы ограничите значения, которые превышают установленные минимумы и максимумы.

И затем используйте t для LERP между low2 и high2 как: finalvalue = low2 * (1-t) + high2 * t