Mit GPS Koordinaten arbeiten.



  • Habe jetzt vollgendes gemacht!

    Ich schpeichere die Werte in ein Vector ab, diese verwende ich dann um meine Rechnung durchzuführen, jedoch hab eich irgendwo ein Fehler.
    Ich bekomme otopische Werte Raus.

    Hier mein Code:

    //als Globale Vectoren ...
    std::vector<double>  breite ;
    std::vector<double>  laenge ;
    //.....
    //füllen der Vectoren....
    //...
    double gesamtHoehe =0;
    double strecke =0;
    	for (int k=0; k < breite.size()-1; k++) {
    	strecke+= R *acos(sin(breite[k])*sin(breite[k+1])+
                      cos(breite[k])*cos(breite[k+1])*cos(laenge[k+1]-laenge[k]));
    
    	}
    
    	strecke = (strecke*PI)/180;
    	strecke = strecke*1000;
            //Die Strecke soll als ein komplettes Endergebniss dargestellt werden...
    	write << strecke<<std::endl; 
    
    	write.close();
    

    ich breuch den ersten und den zweiten Wert, danach muss das Ergebnis zwischengespeichert werden, danach brauche ich dern 2. und den 3. Wert, dieser muss zum vorherigen dazu addiert werden dann den 3. und den 4. Wert usw.

    Ich hoffe jemand kann mir sagen wo ich den fehler drin habe.

    Nach einem testlauf, habe ich bei Werten für normalerweise 300m distant 38756,39 Meher erhalten.



  • Bogenmaß.



  • Was meinst du damit?
    Ich habe ja durch

    strecke = (strecke*PI)/180;
    strecke = strecke * 1000;
    

    umgerechnet, und die angabe in meter gemacht.



  • sin() und cos() verlangen den Parameter im Bogenmaß.



  • Die Formel die ich hier habe gilt für die Angabe der Winkel in Radiant.

    Sie ist ja dafür gedacht, damit ich nicht in Bogenmaß rechnen muss.



  • Das ändert nix daran das die cos() und sin() Funktion den Eingabe Wert im Bogenmaß erwartet. Daher musst du deine Eingabe Werte vorher umrechnen.



  • Ok, wenn ich das dann richtig verstehe, muss ich wie hier angegeben http://www.frustfrei-lernen.de/mathematik/bogenmass-und-gradmass.html

    meine Werte umrechnen.

    Wie genau müsste ich das jetzt in meinem Code machen, wäre für jede Hilfe dankbar.

    [code]
    double gesamtstrecke =0;
    for (int k=0; k < breite.size()-1; k++) {

    double s1 = sin(breite[k]);
    double s2 = sin(breite[k+1]);
    double cb1 = cos(breite[k]);
    double cb2 = cos(breite[k+1]);
    double cl1 = laenge[k];
    double cl2 = laenge[k+1];
    double ccl = cos(cl2-cl1);

    strecke= R * acos(s1*s2+cb1*cb2*ccl);
    gesamtstrecke=gesamtstrecke+strecke;
    write<<gesamtstrecke<<std::endl;
    }



  • Wenn ich das richtig sehe, möchtest du doch nur jeweils die Entfernungen zwischen 2 Punkten aufsummieren?

    Bemüh' mal den ollen Pythagoras 🤡 .



  • Z.b so

    #include <math.h>
    ...
    
    double strecke =0;
       for (int k=0; k < breite.size()-1; k++) {
    			double s1 = sin(breite[k]/180.0 * M_PI);
    			double s2 = sin(breite[k+1] /180.0 * M_PI);
    			double cb1 = cos(breite[k]/180.0 *M_PI);
    			double cb2 = cos(breite[k+1]/180.0 * M_PI);
    			double cl1 = laenge[k]/180.0 *M_PI;
    			double cl2 = laenge[k+1]/180.0 * M_PI;
    			double ccl = cos(cl2-cl1);
    
    			strecke+= R * acos(s1*s2+cb1*cb2*ccl);
                            }
    			std::cout<<strecke<<std::endl;
    


  • dref schrieb:

    Bemüh' mal den ollen Pythagoras 🤡 .

    Der gilt aber nur bei einem ebenen Dreieck.



  • DirkB schrieb:

    dref schrieb:

    Bemüh' mal den ollen Pythagoras 🤡 .

    Der gilt aber nur bei einem ebenen Dreieck.

    Kann aber bei kurzen Distanzen trotzdem ausreichen 😉



  • Schlangenmensch schrieb:

    DirkB schrieb:

    dref schrieb:

    Bemüh' mal den ollen Pythagoras 🤡 .

    Der gilt aber nur bei einem ebenen Dreieck.

    Kann aber bei kurzen Distanzen trotzdem ausreichen 😉

    Ja, aber nur in der Gegend am Äquator.


Anmelden zum Antworten