<< Chapter < Page Chapter >> Page >

Inversione di una mappa

Ha senso costruire una mappa inversa, ad esempio per ritrovare l'indice apartire da un valore di proprietà, solo se la mappa di partenza è monotona, crescente o decrescente, in modo da stabilire unacorrispondenza biunivoca tra indice e valore. Ad esempio, pre-caricando un array con un quarto di seno campionato in 128punti, come costruisco un array che contiene la mappa inversa, cioè l'arcoseno? int ris = 128; float[] midimap = new float[ris]; float[] invmap = new float[ris]; void setup() { size(ris,ris); colorMode(RGB, 1.0); /* inizializza */ for (int i = 0; i < midimap.length; i++) midimap[i] = (ris - 1) * sin(PI/2*(float)i/midimap.length); /* inverti */ for (int i = 0; i < midimap.length; i++) invmap[round(midimap[i])] = i; /* disegna */ for (int i = 0; i < midimap.length; i++) { point(i, ris - midimap[i]); point(i, ris - invmap[i]); } println(invmap); }

Si noti, dal printout prodotto dalla inversione di una mappa , che la mappa inversa così costruita ha parecchi buchi(zeri). Come si possono eliminare tali buchi?

Il codice seguente riempie i buchi per interpolazione, ma non funziona se i buchi sono fatti da più zeri contigui: for (int i = 1; i < invmap.length-1; i++) if (invmap[i] < 0.0001) // se buco, fai la media degli adiacenti invmap[i] = (invmap[i-1] + invmap[i+1])/2; /* non funziona se i buchi sono fatti da più zeri contigui */ println(invmap);

Mappe lineari

In molti casi i sensori si comportano linearmente e ciò che serve è una mappalineare. In tal caso, non è necessario scomodare un array per realizzarla. Ad esempio, si supponga che un sensore didistanza restituisca un valore in metri che corrisponde alla quantizzazione della distanza massima di 10 metri in 1024valori (10 bit). Se con tale sensore vogliamo mappare diverse posizioni da 1 a 3 metri in indici di pixel da 0 a 127, si puòsemplicemente notare che la distanza di 1 metro produce il valore 102, mentre la distanza di 3 metri produce il valore 307. Detto d il valore di distanza tra 0 e 1023 restituito dal sensore, il pixel da accendere è 128 307 102 d 102

Istogrammi

Le operazioni che si basano sul conteggio di elementi vengono supportate bene darappresentazioni mediante array. E' questo il caso della produzione dell' istogramma . In elaborazione di immagini questa è una operazione che si faassai di frequente in quanto supporta diverse elaborazioni efficaci dei colori.

Lettura

Si legga il capitolo 10 di How to Think Like a Computer Scientist

Array nel visual programming

Gli array, come liste ordinate di numeri, si prestano naturalmente ad una rappresentazione visuale, e quindi trovanoun impiego esteso nel visual programming , quale è quello che si pratica con gli ambienti Max/MSP e Pure Data (Pd).

In Pd un array può essere allocato mediante la primitiva table , alle quale viene passato un nome e una lunghezza. Tutti gli array sono memorizzati come numerifloating point. Il contenuto degli array può essere visualizzato in una finestra facendo "open" sull'oggetto table . Ad esempio, se creo un oggetto con table mappa 64 , l'interprete costruisce un subpatch contenente un array, il quale si può visualizzarecliccando sull'oggetto stesso. Si può accedere ad ogni singolo elemento dell'array con gli oggetti tabread mappa e tabwrite mappa , rispettivamente.In più, gli array in Pd hanno metodi che supportano varie operazioni. Ad esempio:

  • una sequenza di valori crescente tra -3 a 3 che inizia alla locazione di posizione 4si può impostare con il messaggio ; mappa 4 -3 -2 -1 0 1 2 3 ;
  • l'array di nome mappa si può rinominare map mediante il messaggio ; mappa rename map ;
  • il riquadro che contiene la rappresentazione visuale dell'array si può ridimensionare con un messaggio del tipo ; map bounds 0 -2 10 2
  • Sulla cornice del riquadro si possono porre delle marcature metriche con un messaggio del tipo ; map xticks 0 0.1 5 nonché dei valori di riferimento con ; map xlabel -1.1 0 1 2 3 4 5

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Programmazione di artefatti interattivi. OpenStax CNX. Dec 09, 2010 Download for free at http://cnx.org/content/col10417/1.9
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Programmazione di artefatti interattivi' conversation and receive update notifications?

Ask