Per un progettino sto utilizzando la funzione map ed ho alcuni dubbi da chiarire.
Premesso che ho letto più volte la spiegazione della funzione ma rimane un dubbio:
La funzione dice che
map(value, fromLow, fromHigh, toLow, toHigh)
quindi
int pinko;
int val=map(pinko, 0 ,1500 , 0 ,189);
Se pinko = 0 val = 0
Se pinko = ... val = valori intermedi
Se pinko = 1500 val = 189
Se pinko = 3000 val = ? (forse 378 ?)
Potrei inserire prima una funzione constrain e quindi ovviare al problema di superamento del valori in ingresso ma mi interesserebbe capire il funzionamento fuori dai limiti indicati.
Se è vera la mia ipotesi mi chiedo che senso ha dare dei limiti (alti e bassi) anche perchè se superando questi limiti si ha comunque il ricalcolo tra un range e l'altro.
Grazie per la pazienza.
come dice il reference questo è il calcolo matematico che fa:
Appendix
For the mathematically inclined, here’s the whole function
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
i valori esterni al range non vengono esclusi
e se devi limitare i valori devi appunto usare constrain
Ok, quindi anche se non ho capito bene la formula matematica, confermi la mia ipotesi
Se pinko = 3000 val = 378
e quindi la mappatura continua anche fuori range.
Grazie
si, sostituendo nella formula i tuoi valori viene:
(3000-0)*(189-0) / (1500-0)+0 e il calcolo da 378
Franchelli:
anche se non ho capito bene la formula
Deriva da qui:
in_max ----- out_max
|
|
|
x---->|---->y
|
in_min ----- out_min
Il segmento tra x e in_min diviso il range di ingresso
è uguale al segmento tra y e out_min diviso il range di uscita.
x - in_min y - out_min
--------------- = -----------------
in_max - in_min out_max - out_min