<< Chapter < Page | Chapter >> Page > |
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);
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:
; mappa 4 -3 -2 -1 0 1 2
3
;mappa
si può rinominare
map
mediante il messaggio
; mappa rename map
;; map bounds 0 -2 10 2
; map xticks 0 0.1 5
nonché dei valori di riferimento con
; map xlabel -1.1 0 1 2 3 4 5
Notification Switch
Would you like to follow the 'Programmazione di artefatti interattivi' conversation and receive update notifications?