Berechnung fehl geschlagen im String grid
-
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
-
Danke noch mal für die Hilfe
-
in einem anderen Programm klappt das
void __fastcall TForm1::Button3Click(TObject *Sender) { double e,B1,B2,L1,L2; B1 = StrToFloat(Edit1->Text); B2 = StrToFloat(Edit3->Text); L1 = StrToFloat(Edit2->Text); L2 = StrToFloat(Edit4->Text); e = (acos(sin(B1*(M_PI/180)) * sin(B2*(M_PI/180)) + cos(B1*(M_PI/180)) * cos(B2*(M_PI/180)) * cos((L1*(M_PI/180)) - (L2*(M_PI/180)))))*6378,3; Edit5->Text =FloatToStr(e);
-
JA ES KLAPPT !!!!
Hab mal das andere Programm genommen und es verknüft jetzt klappt esif (i>1) { 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]); e = (acos(sin(B1*(M_PI/180)) * sin(B2*(M_PI/180)) + cos(B1*(M_PI/180)) * cos(B2*(M_PI/180)) * cos((L1*(M_PI/180)) - (L2*(M_PI/180)))))*6378,3; SG1->Cells[10][i] =FloatToStr(e);}