Dubbio su "MAP"

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: Se pinko = 3000 val = ? (forse 378 ?)

Eh, si, 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