Zie hier drie briljant kleine functies om het leven van een programmeur wat aangenamer te maken: normalize, interpolate en map. Ideaal voor het maken van scrollbars, sliders of andere ellende waarbij je de properties van twee objecten met verschillend bereik met elkaar laat communiceren.
normalize geeft je een value tussen 0 en 1 terug op basis van de meegegeven value en bereik. Interpolate doet precies het tegenovergestelde. Deze geeft je de waarde terug van een genormalizede waarde binnen het meegegeven bereik. Map is de geniale combinatie van deze twee functies.
public static function normalize(value:Number, minimum:Number, maximum:Number):Number
{
return (value - minimum) / (maximum - minimum);
}
public static function interpolate(normValue:Number, minimum:Number, maximum:Number):Number
{
return minimum + (maximum - minimum) * normValue;
}
public static function map(value:Number, min1:Number, max1:Number, min2:Number, max2:Number):Number
{
return interpolate( normalize(value, min1, max1), min2, max2);
}
Je hebt ‘m nog niet? Ok. Stel je hebt een slider gemaakt en links en rechts de waarden 1kg en 500kg gezet. Je slider loopt van xpos = 50 t/m xpos = 250. Je wilt na het sliden van de user weten welke waarde in kg ie heeft gekozen.
Je normalized eerst de xpos door vNorm = normalize(xpos, 50, 250) te doen. Je weet nu waar je zit op de slider tussen 0 en 1. Deze waarde geef je door aan de interpolate: vInt = interpolate(vNorm, 1, 500) en deze geeft je dan het exacte aantal kg terug. En dat kan dan in één keer met val = map(xpos, 50, 250, 1, 500)!
