Skip to content

Instantly share code, notes, and snippets.

@marcovincit
Created July 14, 2021 22:59
Show Gist options
  • Save marcovincit/ebc5a420f61c18e6e1fb68d49c7ae274 to your computer and use it in GitHub Desktop.
Save marcovincit/ebc5a420f61c18e6e1fb68d49c7ae274 to your computer and use it in GitHub Desktop.
export default function modulate(
input,
[inputRangeInitial, inputRangeFinal],
[outputRangeInitial, outputRangeFinal],
limit
) {
const constrain = (result, low, high) =>
Math.max(Math.min(result, high), low);
const result =
((input - inputRangeInitial) / (inputRangeFinal - inputRangeInitial)) *
(outputRangeFinal - outputRangeInitial) +
outputRangeInitial;
if (!limit) return result;
return outputRangeInitial < outputRangeFinal
? constrain(result, outputRangeInitial, outputRangeFinal)
: constrain(result, outputRangeFinal, outputRangeInitial);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment