2013-06-16 14 views
9

Sto prendendo una classe che utilizza Processing.Come funziona la funzione map() in Processing?

Ho riscontrato un problema nella comprensione della funzione map().

In base ad esso è la documentazione (http://www.processing.org/reference/map_.html):

Re-maps un numero da un intervallo all'altro.

Nel primo esempio precedente, il numero 25 viene convertito da un valore compreso tra 0 e 100 in un valore compreso tra il bordo sinistro della finestra (0) e il bordo destro (larghezza).

Come mostrato nel secondo esempio, i numeri al di fuori dell'intervallo non sono bloccati sui valori dei parametri minimi e massimi, poiché i valori fuori intervallo sono spesso intenzionali e utili.

È simile a una funzione casuale ma l'intervallo è impostato dall'utente? Inoltre, non riesco a capire la spiegazione del primo esempio: dice che il numero viene convertito in un valore da 0 a 100 in un valore che va da un bordo all'altro dello schermo. Sto pensando perché non solo convertire direttamente, il numero 25 per l'intervallo di valore relativo allo schermo?

risposta

19

La funzione map() è una scorciatoia utile e non rimpiangere il tempo speso a comprenderlo.
Questa è la sua sintassi:

variable2 = map (variabile1, min1, max1, min2, max2);

La funzione stabilisce una proporzione tra due gamme di valori:

min1: min2 = max1: Max2

si può leggere come: min1 vale a min2 come max1 è a max2.
variabile1 negozi un valore compreso tra il primo intervallo min1 ~ max1.
variabile2 ottiene un valore compreso tra il secondo intervallo min2 ~ max2.

Questa è l'equazione della funzione risolve per il programmatore:

variable2 = min2 + (max2-min2) * ((variable1-min1)/(max1-min1))

Questo è il codice Java dietro la funzione cartina Processing():

static public final float map(float value, 
           float istart, 
           float istop, 
           float ostart, 
           float ostop) { 
    return ostart + (ostop - ostart) * ((value - istart)/(istop - istart)); 
} 
+1

Immaginate un potenziale caso d'uso del vostro programma che riceve valori normalizzati (cioè 0.0 - 1.0) da qualcosa, e poi volete usarlo per cambiare il colore dello sfondo in Processing. Si può andare in background (map (receiveValue, 0.0, 1.0, 0.0, 255.0)); –

+0

@ jesses.co.tt: So che questo non è il punto del tuo commento, ma in questo caso non sarebbe molto più semplice fare 'background (receivedValue * 255.0)'? – flarn2006

+0

@flarn2006 sì, map() è solo una funzione di convenienza, ea volte è molto più semplice da fare come hai detto ... ma suppongo che map() sia utile in caso di casi più complicati ... –

2

pensare in questo modo: dividere una gamma da 0 a 10 in 100 parti uguali. (otterrete 0,1 per parte) ora dividete l'intervallo da 0 a 100 in 100 parti uguali (otterrete 1 per parte) quindi 0,1 nell'intervallo da 0 a 10 è uguale a 1 nell'intervallo da 0 a 100. se volete per trovare dove 5 nell'intervallo da 0 a 10 appartiene all'intervallo da 0 a 100, dividi 5 per la dimensione di una parte da 0 a 10 e moltiplica quel numero per la dimensione di una parte da 0 a 100 e avrai la tua risposta !(50)

P.S. So che non è così che funziona, ma ho solo pensato di dare un esempio per chiarire le cose.

Problemi correlati