Je fais de la génération de terrain et j'ai une bibliothèque Perlin qui me donne des nombres aléatoires entre -1 et +1. Je veux convertir cela à l'échelle de 0 à 255. Quelle est la bonne façon de procéder?
mathematics
Thraka
la source
la source
La plage
-1
à1
est une plage totale de2
. Vous devez donc l'adapter de manière appropriée pour y accéder255
. Quelque chose comme ça:Donc, vous ajoutez d'abord
1
, pour obtenir0..2
puis multiplier avec127.5
pour obtenir une gamme de0..255
la source
Grâce à la puissance de la mise à l'échelle et du biais.
De votre valeur, soustrayez la valeur minimale de votre plage. Cela vous donnera une valeur dans la plage [0..2].
Divisez cela par la largeur de la plage source, en vous donnant une valeur dans la plage [0..1].
Multipliez cela par la largeur de la plage cible, en vous donnant une valeur dans la plage [0..255].
Ajoutez la base de la plage cible pour obtenir une valeur dans la plage cible, qui dans ce cas est la même que l'étape précédente.
En résumé:
la source
J'espère que cela t'aides.
la source
Traduire la plage d' entrée pour obtenir le min à zéro en ajoutant 1 (la valeur négative de l'entrée min) -1 .. 1 -> 0 .. 2
Comme la plage de sortie commence par zéro, ne faites rien pour cela.
Mettre à l'échelle la nouvelle plage d'entrée afin qu'elle s'adapte à la plage de sortie, c'est facile car ils commencent maintenant tous les deux à zéro: multipliez la valeur par 255/2 0..2 * 2/255 -> 0..255
Terminé!
Exemple:
0,5 ira: (0,5 + 1) * 127,5 = 191,25 -0,5 ira: (-0,5 + 1) * 127,5 = 63,75
la source
Disons qu'il
x
s'agit de l'entrée d'origine et de lay
sortie attendue. Nous avons au moins deux points (x, y) (-1, 0) (1, 255)Puisque nous voulons faire une interpolation linéaire, nous pouvons regarder l'équation de forme
y = m*x + c
Avec plus de deux points, nous pouvons résoudre
m
etc
Une fois cela fait, vous obtenez l'équation de transformation.Notez que cette méthode fonctionne également pour d'autres types d'équations. par exemple, si vous voulez une interpolation exponentielle ou quadratique.
la source
v = (1-a)*x + (a)*y
. Je ne vois pas en quoi cette réponse a beaucoup de pertinence avec la question posée car tout ce qu'il veut, c'est une cartographie des plages.