247 votes

Comment faire pour réduire une plage de nombres avec valeur max et min connu

J’essaie donc de comprendre la façon de prendre une série de nombres et ajuster les valeurs vers le bas pour ajuster une gamme. La raison de vouloir faire cela, c’est que je suis en train de dessiner des ellipses dans un jpanel d’oscillation de java. Je veux la hauteur et la largeur de chaque ellipse dans un intervalle de dire 1-30. J’ai des méthodes que trouver les valeurs minimales et maximales de l’ensemble de mes données, mais que je n’aurai le min et max jusqu’au moment de l’exécution. Y a-t-il un moyen facile de faire cela ?

574voto

irritate Points 2047

Disons que vous souhaitez mettre à l'échelle un éventail [min,max] de [a,b]. Vous êtes à la recherche d'un (continue) de la fonction qui satisfait à

f(min) = a
f(max) = b

Dans votre cas, a 1 et b serait de 30, mais nous allons commencer avec quelque chose de plus simple et essayez de mapper [min,max] dans la gamme [0,1].

Mettre min dans une fonction et de sortir de 0 peut être accompli grâce à

f(x) = x - min   ===>   f(min) = min - min = 0

C'est presque ce que nous voulons. Mais, en max nous donnerait max - min lorsque nous voulons réellement 1. Donc, nous allons avoir de l'échelle:

        x - min                                  max - min
f(x) = ---------   ===>   f(min) = 0;  f(max) =  --------- = 1
       max - min                                 max - min

qui est ce que nous voulons. Nous avons donc besoin de faire une traduction et une mise à l'échelle. Maintenant, si au lieu de cela, nous voulons obtenir des valeurs arbitraires de a et b, nous avons besoin de quelque chose d'un peu plus compliqué:

       (b-a)(x - min)
f(x) = --------------  + a
          max - min

Vous pouvez vérifier que la mise en min pour x offre désormais a, et en mettant en max donne b.

On peut également constater qu' (b-a)/(max-min) est un facteur d'échelle entre la taille de la nouvelle gamme et la taille de l'aire de répartition d'origine. Si vraiment nous sommes d'abord traduire x par -min, mise à l'échelle pour le bon facteur, et puis le traduire en arrière jusqu'à la nouvelle valeur minimale de l' a.

Espérons que cette aide.

30voto

Java42 Points 4375

Pour plus de commodité, voici un algorithme d’irriter dans une forme de Java. Ajouter la vérification des erreurs, gestion des exceptions et tordre au besoin.

Testeur :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X