|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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 è. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Non vedo il problema. C++ supporta gli array multidimensionali, tipo
Codice:
double array[2][4][4]; |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
non è un problema, volevo la conferma di questa cosa. Grazie.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
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;
}
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
Quote:
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 è. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
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 Codice:
Matrix4x4 matrice; matrice[0] = vettore1; // eccetera |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
Quote:
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
|
|
|
|
|
|
#9 |
|
Senior Member
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; 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); 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 }};
Grazie in anticipo a tutti per la disponibilità.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
#10 |
|
Senior Member
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 è. |
|
|
|
|
|
#11 |
|
Senior Member
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 16:15. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
u Quote:
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
|
#13 |
|
Senior Member
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 }}}};
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(...) 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 è. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
up
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:08.




















