Salve a tutti,
ho un problema: quando assegno dei valori a dei double anche parte di matrici si sovrascrivono.
Riporto il codice che va a sovrascrivere la matrice
maT in modo inspiegabile per me.
Potete darmi una mano, sono disperato.
GRAZIE
\\\\\\\\\\\\\\\\\\\ MAIN \\\\\\\\\\\\\
//Istanzio le classi
CCAD_Elaborazioni Cad;
CUtilityFile FileUtility_src;
//dichiarazioni e inizializzazioni
double X,Y,Z,A_fi,B_teta,C_psi;
X = 0;
Y= 0;
Z = 0;
A_fi = 0;
B_teta = 0;
C_psi = 0;
double maT_base_offset[4][4];
double maT[4][4];
// inizializzo le matrici con una semplice funzione
GeneraMatIdentita(Matrice);
GeneraMatIdentita(maT_base_offset);
//apro file e lo carico in un vettore
...
//
//scorro il vettore e cerco la tiga interessata
for(int indice_linea=0;indice_linea<max_ind_linea_src;indice_linea++)
{
// assegno alla stringa line una riga alla volta del vettore
string line = FileUtility_src.GetLineaString(indice_linea);
cerco in ogni riga del vettore "Base_Offset"
int pos = line.find("Base_Offset = {",0);
if(pos!=string::npos)
{
// trovata la riga: Base_Offset = {X 1, Y 2, Z 3, A 4, B 5, C 6}
//in questo punto la matrice è corretta:
// maT = [ 1 0 0 0
// 0 1 0 0
// 0 0 1 0
// 0 0 0 1 ]
//PROBLEMA>>>>>>>>>>>>>>>>>>>>>>
// estraggo dalla riga i valori della sestina e li metto in double
//(la funzione è riportata sotto)
Cad.EstrazioneDatiRigaDat(line,X, Y, Z, A_fi, B_teta, C_psi);
//la matrice diventa:
// maT = [ 1 0 0 0
// 0 1 0 0
// 0 0 1 6
// 5 4 3 2 ]
//notare la somiglianza dell'ultima riga della matrice con con la linea letta
//PROBLEMA>>>>>>>>>>>>>>>>>>>>
// costruisco la matrice dalla sestina
CostruzioneMatOmogeneaTrasformazione(X, Y, Z, A_fi, B_teta, C_psi, maT_base_offset);
}
}
.......
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//
//Estrae dalla riga del file dat i valori di
//X, Y, Z, A_fi, B_teta, C_psi
//
void CCAD_Elaborazioni::EstrazioneDatiRigaDat(string linea_dat, double &O_X, double &O_Y, double &O_Z, double, &O_A, double &O_B, double &O_C)
{
//dichiarazioni locali
string supporto;
vector<string> results;
results.clear();
//Istanzio classe di CUtilityStringhe per usarne le proprietà della classe
CUtilityStringhe StringheUtility;
// ricordo che linea_dat sarà "Base_Offset = {X 1, Y 2, Z 3, A 4, B 5, C 6}"
StringheUtility.SplitString(linea_dat,"{",results);
//results[1] contiene la stringa con i dati utili
supporto = results[1]; \\ "X 1, Y 2, Z 3, A 4, B 5, C 6}"
if (StringheUtility.SplitString(supporto, "}", results) > 0)
{
supporto = results[0]; \\ "X 1, Y 2, Z 3, A 4, B 5, C 6"
};
StringheUtility.SplitString(supporto,",",results);
//elimino blank
results[0] = StringheUtility.TrimStringa(results[0]); \\ "X 1"
results[1] = StringheUtility.TrimStringa(results[1]); \\ "Y 2"
results[2] = StringheUtility.TrimStringa(results[2]); \\ "Z 3"
results[3] = StringheUtility.TrimStringa(results[3]); \\ "A 4"
results[4] = StringheUtility.TrimStringa(results[4]); \\ "B 5"
results[5] = StringheUtility.TrimStringa(results[5]); \\ "C 6"
//Ora elimino la lettera iniziale da ogni stringa
results[0] = results[0].erase(0,1); \\ "1"
results[1] = results[1].erase(0,1); \\ "2"
results[2] = results[2].erase(0,1); \\ "3"
results[3] = results[3].erase(0,1); \\ "4"
results[4] = results[4].erase(0,1); \\ "5"
results[5] = results[5].erase(0,1); \\ "6"
//Converto stringhe di numeri in double
O_X = ConvertoStringaNumeriInDouble(StringheUtility.TrimStringa(results[0]));
O_Y = ConvertoStringaNumeriInDouble(StringheUtility.TrimStringa(results[1]));
O_Z = ConvertoStringaNumeriInDouble(StringheUtility.TrimStringa(results[2]));
O_A = ConvertoStringaNumeriInDouble(StringheUtility.TrimStringa(results[3]));
O_B = ConvertoStringaNumeriInDouble(StringheUtility.TrimStringa(results[4]));
O_C = ConvertoStringaNumeriInDouble(StringheUtility.TrimStringa(results[5]));
}