Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-01-2014, 17:42   #1
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
[C++] Un array di matrici[4x4] come si fa?

Salve a tutti.

Ho una serie di valori memorizzati in una serie di array di double [4][4], in pratica sono matrici 4x4.

Mi servirebbe poterle assegnare ad un array, così da poter richiamare (ad esempio) la matrice 2 facendo array[2] nella funzione.

Questa cosa è possibile? Cosa mi consigliate?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 18:01   #2
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Non vedo il problema. C++ supporta gli array multidimensionali, tipo

Codice:
double array[2][4][4];
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 18:05   #3
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da pabloski Guarda i messaggi
Non vedo il problema. C++ supporta gli array multidimensionali, tipo

Codice:
double array[2][4][4];
non è un problema, volevo la conferma di questa cosa. Grazie.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 18:16   #4
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da DomusP45 Guarda i messaggi
Salve a tutti.

Ho una serie di valori memorizzati in una serie di array di double [4][4], in pratica sono matrici 4x4.

Mi servirebbe poterle assegnare ad un array, così da poter richiamare (ad esempio) la matrice 2 facendo array[2] nella funzione.

Questa cosa è possibile? Cosa mi consigliate?
Codice:
#include <array>
#include <vector>

int main()
{
	using Array4 = std::array<double, 4>; // se non compila, scrivi typedef std::array<double, 4> Array4;
	using Matrix4x4 = std::array<Array4, 4>;

	Array4 vettore1 = { 1., 2., 3., 4. };
	Array4 vettore2 = { 5., 6., 7., 8. };
	Array4 vettore3 = { 9., 8., 7., 6. };
	Array4 vettore4 = { 5., 4., 3., 2. };

	Matrix4x4 matrice = { vettore1, vettore2, vettore3, vettore4 };

	std::vector<Matrix4x4> arrayDiMatrici;
}
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 18:27   #5
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Codice:
#include <array>
#include <vector>

int main()
{
	using Array4 = std::array<double, 4>; // se non compila, scrivi typedef std::array<double, 4> Array4;
	using Matrix4x4 = std::array<Array4, 4>;

	Array4 vettore1 = { 1., 2., 3., 4. };
	Array4 vettore2 = { 5., 6., 7., 8. };
	Array4 vettore3 = { 9., 8., 7., 6. };
	Array4 vettore4 = { 5., 4., 3., 2. };

	Matrix4x4 matrice = { vettore1, vettore2, vettore3, vettore4 };

	std::vector<Matrix4x4> arrayDiMatrici;
}
infatti, il metodo diretto non funziona, o perlomeno mi caccia un errore (troppi inizializzatori)...come si dichiara un vettore multidimensionale (intendo come ci assegno i contenuti)?

Considerando che sono 9 matrici 4x4, il metodo migliore qual'è?

double [9][4][4] oppure con vector e array?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 18:31   #6
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da DomusP45 Guarda i messaggi
infatti, il metodo diretto non funziona, o perlomeno mi caccia un errore (troppi inizializzatori)...come si dichiara un vettore multidimensionale (intendo come ci assegno i contenuti)?

Considerando che sono 9 matrici 4x4, il metodo migliore qual'è?

double [9][4][4] oppure con vector e array?
Il metodo migliore è sempre usare vector e array perchè sono oggetti intelligenti. Con un double[9][4][4] rischi di sbagliare alla grande con gli indici...

Ad ogni modo il mio codice ha dentro qualche feature del C++11; se non hai compilatori adatti (Visual Studio 2013 o GCC 4.7+) puoi inizializzare gli Array4 così:
Codice:
Array4 vettore1; vettore1[0] = 1.; vettore1[1] = 2.; // eccetera, o usando un ciclo for o in tanti altri modi
E analogamente
Codice:
Matrix4x4 matrice; matrice[0] = vettore1; // eccetera
std::array è per lo più come std::vector, ma non ridimensionabile.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 18:34   #7
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Il metodo migliore è sempre usare vector e array perchè sono oggetti intelligenti. Con un double[9][4][4] rischi di sbagliare alla grande con gli indici...

Ad ogni modo il mio codice ha dentro qualche feature del C++11; se non hai compilatori adatti (Visual Studio 2013 o GCC 4.7+) puoi inizializzare gli Array4 così:
Codice:
Array4 vettore1; vettore1[0] = 1.; vettore1[1] = 2.; // eccetera, o usando un ciclo for o in tanti altri modi
E analogamente
Codice:
Matrix4x4 matrice; matrice[0] = vettore1; // eccetera
std::array è per lo più come std::vector, ma non ridimensionabile.
io sto usando visual c++ 2010, posso usare questa sintassi?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2014, 19:14   #8
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da DomusP45 Guarda i messaggi
io sto usando visual c++ 2010, posso usare questa sintassi?
Scusa ma non puoi provare prima di scrivere un post? Certo che puoi...
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2014, 10:50   #9
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
ho provato un'altra cosa, sempre con <vector>

L'ho dichiarato così

Codice:
vector<double[4][4]> arrayoftc;
che è un pò quello che mi servirebbe a me, un array di double4x4. Però non va.

Considerando che sono 9 matrici, messe in 9 array double[4][4], io l'assegnazione l'avevo fatta così

Codice:
arrayoftc.push_back(T1);
	arrayoftc.push_back(T2);
	arrayoftc.push_back(T3);
	arrayoftc.push_back(T4);
	arrayoftc.push_back(T5);
	arrayoftc.push_back(T6);
	arrayoftc.push_back(T7);
	arrayoftc.push_back(T8);
	arrayoftc.push_back(T9);
dove T1, T9 sono le 9 matrici 4x4 (double)

ma mi da errore.

Non ho ben capito come fare la cosa del "matrix4x4" e assegnargli i vettori...a me sono le matrici sono così salvate:

Codice:
double T8[4][4] = {
		{-1,    0.2,   -0.2,    0.1},
		{0.1,   -0.3,   -0.9,    0.15},
		{-0.5,   -0.80,    0.25,    0.89},
		{0,         0,         0,    1.0     }};
e vorrei appunto assegnare ognuna di queste ad una posizione del "vector" come faccio?

Grazie in anticipo a tutti per la disponibilità.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 09:12   #10
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
up...nessuno mi sa aiutare?

Alla fine quello che mi servirebbe è implementare "una coda" di array 4x4, che vado a riempire man mano...facendo push da un lato, e pop dall'altro quando mi servono le matrici double [4][4]...

Qualcuno mi sa aiutare?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 12:37   #11
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
EDIT: mamma mia, rileggendo quello che ho scritto mi vergogno, mi esprimo meglio:
Crea una classe per rappresentare la tua matrice 4x4, poi crei una coda dove andrai ad inserire gli elementi della matrice le matrici.
Per le code vedi qui:
http://www.cplusplus.com/reference/queue/queue/

Ultima modifica di Daniels118 : 07-02-2014 alle 15:15.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 14:52   #12
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
u
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Crea una classe per rappresentare la tua matrice, poi crei una coda dove andrai ad inserire gli elementi della matrice.
Per le code vedi qui:
http://www.cplusplus.com/reference/queue/queue/
Grazie dell'idea!
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2014, 17:28   #13
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Ho cambiato il mio codice con questo:

//per l'array delle TC

Codice:
typedef array<array<double,4>,4> Matrix;


Matrix T1 = {{
			{{-1.0000,   0.0000,  -0.0000,   0.1531}},
			{{0.0000,   0.0000,  -1.0000,   0.1502 }},
			{{-0.0000,  -1.0000,  -0.0000,   1.0790}},
			{{0 ,       0,        0,   1.0000	  }}}}; 

Matrix T2 = {{	
			{{-1.0000,    0.0009,    0.0019,    0.1500}},
			{{-0.0021,   -0.4464,   -0.8948,    0.1845}},
			{{0.0000,   -0.8948,    0.4464,    0.8094 }},
			{{ 0,         0,         0,    1.0000	 }}}};
etc...

poi le metto nell'array vector così

Codice:
vector <Matrix> TCS;

TCS.push_back(T1);
	TCS.push_back(T2);
	TCS.push_back(T3);
	TCS.push_back(T4);
	TCS.push_back(...)
e così via.

Ora, mi serve accedere alla singola TC da un'altra funzione, che vuole la matrice nel formato di partenza, cioè double[4][4]...come faccio per ottenere la singola TC?

Avevo provato con

Codice:
 double m[4][4] = TCS.pop_back;

ma non va bene...a me andrebbe bene fare il pop man mano, però devo mettere la matrice "popped" in un array temporaneo che sia double[4][4] così da poterlo utilizzare con le classiche chiamate m[i][j] e lavorarci...

sapete aiutarmi su quest'ultima cosa?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2014, 09:15   #14
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
up
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v