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 ?
Réponses
Trop de publicités?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.