Berechnung fehl geschlagen im String grid



  • 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 in

    51895842 /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 es

    if (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);
    

    }


Anmelden zum Antworten