<< Chapter < Page Chapter >> Page >

Nella computer grafica interattiva, punti e vettori sono rappresentati in coordinate omogenee mediante array di quattro elementi, e tutte le trasformazioni geometriche (traslazioni, rotazioni, scalamenti, proiezioni) sono realizzate con prodotti matrice-vettore.

Prodotto matrice-vettore

L'inversione tra elementi di posto pari ed elementi di posto dispari mediante prodotto matrice-vettore è illustrata dalcodice int DIM = 4; float[][] myMatrix = {{0, 1, 0, 0}, {1, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 0} }; float[] myVector = {0.1, 0.2, 0.3, 0.4}; float[] newVector = new float[4]; for (int i=0; i<DIM; i++) for (int j=0; j<DIM; j++) newVector[i] += myMatrix[i][j] * myVector[j]; println(myVector); println(); println(newVector);

Come è fatta la matrice che, pre-moltiplicata per un array, ne ruota circolarmente di una posizione gli elementi?

0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 Una matrice fatta così è un caso particolare di matrice circolante .

Many-to-many mapping

In molte applicazioni di interaction design (si veda, ad esempio, il caso della interactive sonification ), ci si trova a dover mappare una molteplicità di variabili, il cui valore può venire dallalettura di sensori, in una molteplicità di parametri algoritmici. Spesso tale mapping è lineare ed esprimibilecon un prodotto matrice-vettore. Ad esempio, distanza, velocità, e temperatura si possono mappare in posizione, colore, e frequenza di oscillazione di un oggetto grafico, in maniera che, ad esempio, il colore dipenda da una combinazione divelocità e temperatura. Il funzionamento delle Mixing Console si può interpretare come mapping multivariato lineare degli ingressi nelle uscite.Purtroppo, molti mapping di interesse sono non-lineari, e non esprimibili mediante prodotto matrice-vettore. Adesempio, la trasformazione delle coordinate di rappresentazione dei colori da RGB a HSB è non lineare.

Lettura

Si legga la sezione Multi-Dimensional Arrays di Data Structures and Algorithms with Object-Oriented Design Patterns in Java o, ancor meglio, la sezione Multi-Dimensional Arrays di Introduction to Programming Using Java .

Mappe

Gli array soffrono di due limitazioni principali:

  • la loro occupazione di memoria va pre-impostata;
  • gli indici sono obbligatoriamente numeri interi.
Quando si parla di mappe, in ambito delle strutture dati, ci si riferisce di solito a strutture più generali, la cuidimensione è dinamicamente allocabile, e nelle quali l'accesso agli elementi può avvenire attraverso oggetti di tipoarbitrario, chiamati key (chiave).

Lettura

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

Matrici nel physical computing

Nel progetto WAV , la classe Matrix per l'ambiente Wiring di physical computing è stata usata per pilotare una matrice di LED a 8 righe e 16colonne per mezzo di un paio di chip MAXIM MAX7219 . Supponiamo per semplicità di dover gestire una matrice a 8 righee 8 colonne per mezzo di un solo chip MAX7219 e di voler propagare una cresta d'onda da sinistra a destra. La matriceviene dichiarata e istanziata come Matrix myMatrix = Matrix(0, 2, 1); Si può predisporre un array bidimensionale di bit 8x8 medianteistanziazione della classe Sprite : Sprite wave = Sprite( 8, 8,b10000000, b10000000,b01000010, b01000010,b00100100, b00100100,b00011000, b00011000,); e scrivere una funzione da eseguirsi a clockrate void loop() {myMatrix.write(i, 1, wave); // place sprite on screen (i is an int) delay(1000); // wait a little bitmyMatrix.clear(); // clear the screen for next animation framei = 1 + (i+1)%8; // circular (between 1 and 8) increment of i } oppure, alternativamente, procedere direttamente alla scrittura ciclica void loop() {myMatrix.clear(); // clear displaydelay(1000);// turn pixels on (i is an int that is forced to stay between 0 and 7) // decreasing rampmyMatrix.write(1, 1+(i)%8, HIGH); myMatrix.write(2, 1+(i)%8, HIGH);myMatrix.write(3, 1+(i+1)%8, HIGH); myMatrix.write(4, 1+(i+1)%8, HIGH);myMatrix.write(5, 1+(i+2)%8, HIGH); myMatrix.write(6, 1+(i+2)%8, HIGH);myMatrix.write(7, 1+(i+3)%8, HIGH); myMatrix.write(8, 1+(i+3)%8, HIGH);// increasing ramp myMatrix.write(3, 1+(i+6)%8, HIGH);myMatrix.write(4, 1+(i+6)%8, HIGH); myMatrix.write(5, 1+(i+5)%8, HIGH);myMatrix.write(6, 1+(i+5)%8, HIGH); myMatrix.write(7, 1+(i+4)%8, HIGH);myMatrix.write(8, 1+(i+4)%8, HIGH); i++;}

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