Übergroße Winkel normieren



  • Hey,

    ich muss für die Uni Funktionsrümpfe in einem Programm ergänzen. In diesem geht es u.A. um Winkelumrechnung.
    Anfangs ist ein Winkel im Gradmaß mit Bogenminute und -sekunde gegeben. Ist dieser zu groß, soll er normiert werden. Genau hier liegt mein Problem.

    Angeblich wird z.B. ein Winkel der Größe 400°400'400" auf 46°46'40" normiert. Kann mir jemand erklären, wie das funktioniert? Also rein mathematisch, muss nicht in Codeform sein. 🙂

    Hier die Programmvorlage, falls es interessiert:

    #include <stdio.h>
    
    #ifndef M_PI
    const double M_PI = 3.14159265358979323846;             // falls nicht in math.h
    #endif
    
    // Struktur für Winkel
    typedef struct
    {
      int grad;          // in {0, ..., 359}
      int minuten;       // in {0, ..., 59}
      double sekunden;   // in [0; 60)
    } Winkel;
    
    void winkelNormalisiere(Winkel* w)
    // normalisiert w, falls grad/minuten/sekunden zu groß,
    // z.B. 400°400'400" wird zu 46°46'40"
    // ist jedoch eine der Komponenten negativ, wird *w immer gesetzt auf 0°0'0"
    {
    }
    
    // erzeugt den Winkel g°m's" und gibt diesen normalisiert zurück
    Winkel winkelNeu(int g, int m, double s)
    {
    }
    
    // Rückgabe des Winkels in Grad als Gleitkommazahl, z.B. 90°30'0" -> 90.5
    double winkelAlsDouble(const Winkel* w)
    {
    }
    
    // Rückgabe des Winkels im Bogenmaß, z.B. 90°0'0" -> M_PI/2
    double winkelImBogenmass(const Winkel* w)
    {
    }
    
    // addiert die winkel *w1 und *w2 und gibt die Summe normalisiert zurück
    Winkel winkelPlus(const Winkel* w1, const Winkel* w2)
    {
    }
    
    // Ausgabe eines Winkels, Format z.B. 90°12'38"
    void winkelDrucke(const Winkel* w)
    {
    }
    
    // Einlesen eines Winkels in *w im Format wie bei Ausgabe
    void winkelEingabe(Winkel* w)
    {
    }
    
    // Testprogramm
    int main(void)
    {
      Winkel w1 = winkelNeu(90, 0, 0);
      printf("w1 = ");
      winkelDrucke(&w1);
      putchar('\n');                                              // -> w1 = 90°0'0"
    
      Winkel w2 = winkelNeu(1, 7, 3.678);
      printf("w2 = ");
      winkelDrucke(&w2);
      putchar('\n');                                           // -> w2 = 1°7'3.678"
    
      printf("neuen Winkel eingeben: ");
      winkelEingabe(&w2);                                      // z.B.: 400°400'400"
      printf("gelesene Eingabe: ");
      winkelDrucke(&w2);
      putchar('\n');                               // -> gelesene Eingabe: 46°46'40"
      printf("in Grad: %g°\n", winkelAlsDouble(&w2));        // -> in Grad: 46.7778°
      printf("im Bogenmaß: %g\n", winkelImBogenmass(&w2));//-> im Bogenmaß: 0.816426
    
      Winkel w3 = winkelNeu(22, 22, 22);
      Winkel w4 = winkelNeu(44, 44, 44);
      winkelDrucke(&w3);
      printf(" + ");
      winkelDrucke(&w4);
      printf(" = ");
      Winkel wsum = winkelPlus(&w3, &w4);
      winkelDrucke(&wsum);
      putchar('\n');                           // -> 22°22'22" + 44°44'44" = 67°7'6"
    
      return 0;
    }
    

    MfG
    Simon



  • lprulzcrossover schrieb:

    Angeblich wird z.B. ein Winkel der Größe 400°400'400" auf 46°46'46" normiert.

    Kann es ein, dass du die 0 nicht richtig gelesen hast?
    40°40'40" kommt eher hin.

    Einmal rum im Kreis, bist du wieder am Anfang.
    Der Bereich geht von 0 <= winkel < 360°

    Du must solange 360 abziehen bis es passt. Oder modulo 360 rechnen.



  • Na dasselbe dachte ich eben auch, aber mein Übungsleiter hat mir extra noch mal bestätigt, dass 46°46'40" herauskommt... 😕
    Hätte ansonsten auch einfach 400°-360° = 40° gerechnet. Ich finde aber auch rein gar nichts dazu im Internet...



  • Oh man, ich sollte nachdenken vor dem schreiben. 🙄

    Es sind 60' für 1° und 60" für 1'

    Daher sind die 400" schon 6'40" plus die 6°40" von den 400'.

    Dann passt das auch.



  • http://de.wikipedia.org/wiki/Winkelminute

    Winkelminuten und Winkelsekunden

    so in etwa: 400' entsprechen 6.6 Grad, d.h. 400 grad und 400' werden zu (400 -360) + 6 grad = 46 grad



  • Ah okay, danke ihr beiden, soweit habe ich nicht gedacht 🙄



  • Eine Winkelminute hat 60 Winkelsekunden und ein Winkelgrad 60 Winkelminuten...

    -> 400°400'400" = 400°400'(6*60+40)'' = 400°406'40" = 400°(6*60+46)'40" = 406°46'40"

    Und nun noch die Normierung des Winkels:

    -> 406°-360° = 46°

    insg. -> 46°46'40"

    Ups: zu spät


Anmelden zum Antworten