La fonction de normaliser n'importe quel nombre de 0 - 1

Je suis en train de faire une fonction qui prend un nombre et normalise de 0 - 1 entre min et max de limites. Par exemple:

Si je veux normaliser une valeur de 10 entre 5 à 15, j'appelle cela:

val = 10; normalize(val, 5, 15); Renvoie à 0,5

normaliser une valeur entre 0 -10 et 5

val = 0; normalize(val, -10, 5); Retourne 0.666

C'est la fonction que je suis venu avec:

function normalize(val, min, max){
  //Shift to positive to avoid issues when crossing the 0 line
  if(min < 0){
    max += 0 - min;
    val += 0 - min;
    min = 0;
  }
  //Shift values from 0 - max
  val = val - min;
  max = max - min;
  return Math.max(0, Math.min(1, val / max));
}

Ma question est: Est-ce la méthode la plus efficace pour normaliser une 1-dimensions de la valeur? Je vais être l'appel de cette fonction quelques milliers de fois par trame à 60fps, donc je voudrais l'avoir optimisé que possible afin de réduire la charge de calcul. J'ai regardé pour la normalisation des formules, mais tout ce que je trouve sont à 2 ou 3 dimensions solutions.

Je ne vois pas la raison pour laquelle vous traitez négatif minutes séparément,
est min et max, toujours le même pour le tableau?
Wow, vous avez raison! J'ai été préventivement le faire sans vraiment le tester. Il fonctionne sans changer de vitesse > 0
min et max serait de changer selon l'endroit où je suis en l'appelant. Parfois, il sera -100, 0 parfois -3, 781, etc.
Il suffit donc de retirer la gestion spéciale de négatif min et vous êtes bon pour aller.

OriginalL'auteur Marquizzo | 2016-09-29