Berechnung fehl geschlagen im String grid
-
kann mir einer Sagen wo der fehler ist bekomme nur 0 raus aus enfehrnungsberechnung
int i=1; double L1,L2,B1,B2,e,r,w; for(int j=0;j<list->Count;j++) { if (list->Strings[j] == "$GPGGA") { //if (list->Strings[j+14] == "*") // Überprüfen ob Prüfsumme da ist { if (list->Strings[j+6]== "1" )//or "2" or "6")// Überprüfung der Messungsignales { SG1->RowCount= i; SG1->Cells[0][i]= list->Strings[j]; // Satzart SG1->Cells[1][i]= list->Strings[j+1];// Zeit SG1->Cells[2][i]= FloatToStr(StrToFloat(StringReplace(list->Strings[j+2],".","",TReplaceFlags() << rfReplaceAll))/1000000);//Breitengrad SG1->Cells[3][i]= FloatToStr(StrToFloat(StringReplace(list->Strings[j+4],".","",TReplaceFlags() << rfReplaceAll))/1000000);//Längengrad SG1->Cells[4][i]= list->Strings[j+6];// Qualität SG1->Cells[5][i]= list->Strings[j+7];// Sateliten SG1->Cells[6][i]= list->Strings[j+8];// HDOP SG1->Cells[7][i]= list->Strings[j+9];// NN SG1->Cells[8][i]= list->Strings[j+11];// Höhe Geo SG1->Cells[9][i]= list->Strings[j+14];// Prüfsumme if (i>1) { B1 = (StrToFloat(SG1->Cells[2][i])/1000000) *(M_PI/180); L1 = (StrToFloat(SG1->Cells[3][i])/1000000) *(M_PI/180); B2 = (StrToFloat(SG1->Cells[2][i-1])/1000000)*(M_PI/180); L2 = (StrToFloat(SG1->Cells[3][i-1])/1000000)*(M_PI/180); w = (acos( sin(B1) * sin(B2) + cos(B1) * cos(B2) * cos(L1 - L2) )); r=6378,3; e = r*w; SG1->Cells[10][i] =FloatToStr(e); } i++; } // Überprüfung der Messungsignales } // Überprüfen ob Prüfsumme da istDanke für die Hilfe
-
kannste denn nicht die berechnung in ne extra-funktion auslagern und deinen code so formatieren, dass er lesbar wird? kriegt man ja augenkrebs von...
ich kann beim besten willen nicht erkennen, wo du ne entfernungsberechnung machst und vorallem von was?
-
Mach mal aus 1000000 1000000.0 und aus 180 180.0. Es könnte sein, dass dein Kompiler hier Integer-Operationen verwendet (obwohl er das nicht sollte).
Dann noch aus 6378,3 6378.3.
-
Hier mach ich die
[cpp]
[cpp]if (i>1)
{
B1 = (StrToFloat(SG1->Cells[2][i])/1000000) (M_PI/180);
L1 = (StrToFloat(SG1->Cells[3][i])/1000000) (M_PI/180);
B2 = (StrToFloat(SG1->Cells[2][i-1])/1000000)(M_PI/180);
L2 = (StrToFloat(SG1->Cells[3][i-1])/1000000)(M_PI/180);
w = (acos( sin(B1) * sin(B2) + cos(B1) * cos(B2) * cos(L1 - L2) ));
r=6378,3;
e = r*w;
SG1->Cells[10][i] =FloatToStr(e);[/cpp]Cells[2] = Längengrade
Cells[3] = Breitengrade
der Rechner sollte mir dann immer aus einen Text die daten ziehen und dann bearbeiten
-
siehe oben
bei r=6378,3; hat r den Wert 3. Kann sein, dass das der Fehler ist.
-
r=6378,3;
nö das ist schon so richtig 6378,3 nach komma 3 kommt
-
mit den Punkten hat nicht geklappt
B1 = (StrToFloat(SG1->Cells[2][i])/1000000.0) *(M_PI/180); L1 = (StrToFloat(SG1->Cells[3][i])/1000000.0) *(M_PI/180); B2 = (StrToFloat(SG1->Cells[2][i-1])/1000000.0)*(M_PI/180); L2 = (StrToFloat(SG1->Cells[3][i-1])/1000000.0)*(M_PI/180); w = (acos( sin(B1) * sin(B2) + cos(B1) * cos(B2) * cos(L1 - L2) )); r=6378.3; e = r*w; SG1->Cells[10][i] =FloatToStr(e);
-
Hier mit r=6378,3; weist du der Variablen r den Wert 3 zu und nicht, wie du vielleicht glaubst 6378.3.
Ansonsten erzeuge erst mal double Variablen aus deinen StringGrid-Feldern und mach (wie Sunday es schon vorgeschlagen hat) eine Funktion aus deiner Berechnung. Dann geh mit dem Debugger durch.
-
aber ie denn dann ???
6378.3 hab ich schon versucht
-
Lies noch mal. Ich habe editiert. Am wichtigsten ist das mit dem Debugger.
-
das hab ich jetzt mal ausprobiert
B1 = StrToFloat(SG1->Cells[2][i]); L1 = StrToFloat(SG1->Cells[3][i]); B2 = StrToFloat(SG1->Cells[2][i-1]); L2 = StrToFloat(SG1->Cells[3][i-1]); B1 = (B1 /1000000.0) *(M_PI/180.0); L1 = (L1/1000000.0) *(M_PI/180.0); B2 = (B2/1000000.0)*(M_PI/180.0); L2 = (L2/1000000.0)*(M_PI/180.0); w = (acos( sin(B1) * sin(B2) + cos(B1) * cos(B2) * cos(L1 - L2) )); r=6378.3; e = r*w; SG1->Cells[10][i] =FloatToStr(e);
-
ahso klappt aber nicht ie mach ich den daraus ne funktion ?
kann mich nicht mehr drann erinnern was wir in der schule gemacht haben peinlich peinlich

-
und?
-
ne klappt leider nicht

-
vielleicht das nächste mal mitschreiben? ganz hilfreich wäre ja auch mal die formel bzw. die daten zu sehen, die deiner berechnung zu grunde liegen.
double CalculateDistance(/* Parameterliste */) { // Berechnung durchfuehren und zurueckgeben }
-
Kann ich dir leider nicht geben wil die unsortiert in einem Txt bzw sortiert dann in einem Stringrid sind ich kann aber mal ein Bsp machen
1 Breitengrad : 51,898422..
1 Längengrad : 7,5682254...
das ist L1 und B1 , B2 und L2 sehen genau so aus
-
Kann es sein, dass in den Zellen deines StringGrids auch Kommas drin sind? Ersetze die mal durch Punkte. Was soll eigentlich diese Division durch 1000000?
-
Das Problem ist ich bekomme die koordinaten mit
Breitengrad :5189.5842
dann suche ich den Punkt und ersetze in51895842 /100000 = 51,81 das ist dan rein rechnerisch so richtig
die 51895.. sind bis dahin auch double
-
warum ersetzt du den punkt?
-
weil der so aus meinem GPS gerät kommt und das nicht ganz richtig ist vom rechnen her.
es sind nämilch hier 51°, 5847...... deswegen muß der Punkt weg