Aus zwei Koordinaten, Richtungswinkel berechnen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von va7.

    Aus zwei Koordinaten, Richtungswinkel berechnen

    Hallo,

    ich möchte eine Prozedur schreiben, die mir aus zwei Koordinaten den Richtungswinkel berechnet.
    In der Aufgabenstellung steht, dass man hierbei die Quadrantenregel beachten soll.
    Ich bekomme den Winkel immer in Rad, möchte ihn aber in Deg haben.
    Und da kommt wohl die Quadrantenregel ins Spiel. Da verstehe ich aber nicht, was zu tun ist.

    Mein Code sieht so aus:

    Sub Main()
    Dim x1, x2, y1, y2, t As Double
    Dim strText As String
    strText = "Geben sie die Koordinaten von y2 ein"
    Console.WriteLine(strText)
    y2 = CDbl(Console.ReadLine())
    strText = "Geben Sie die Koordinaten von y1 ein"
    Console.WriteLine(strText)
    y1 = CDbl(Console.ReadLine())
    strText = "Geben Sie die Koordinaten von x2 ein"
    Console.WriteLine(strText)
    x2 = CDbl(Console.ReadLine())
    strText = "Geben Sie die Koordinaten von x1 ein"
    Console.WriteLine(strText)
    x1 = CDbl(Console.ReadLine())
    t = Math.Atan((y2 - y1) / (x2 - x1))
    Console.ReadLine()
    Console.WriteLine("Richtungswinkel = {0}", t)
    Console.readline()
    End Sub

    Vielen Dank schon Mal.
    keine Ahnung, was mit Quadranten beachten gemeint ist.
    System.Math hat eine nette Methode Math.Atan2(), die beachtet Quadranten in gewisser weise.

    Hat aber nix mitte Umrechnung rad/deg zu tun - da sind die Quadranten schon beachtet, oder sind es nicht.

    Was vlt. eine gute Idee wäre, wenn du "Quadranten beachten" definieren tätest, weil sonst kann ja jeder sagen, er würde "Quadranten beachten".

    va7 schrieb:

    ich möchte eine Prozedur schreiben, die mir aus zwei Koordinaten den Richtungswinkel berechnet.
    Trenne Dein Problem in 2 Teilprobleme auf, die Du unabhängig voneinander löst:
    1. Entgegennahme von Input in einer Console,
    2. Berechnung eines Winkels aus 2 Koordinatenwerten. Gib Dir diese zunächst willkürlich im Code vor, vergleiche das Resultat mit Deiner Skizze auf einem Blatt Papier, und wenn Du das Prozedere verstanden hast, nimm en Input dazu.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dksksm schrieb:

    Begriffen wie
    Polarkoordinaten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dazu ist doch nur, wie bereits erwähnt, der Atan2 von Nöten - das wars, ich sehe das PRoblem hier nicht ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Das ist mir klar. Wäre jetzt hilfreich zu wissen, was die Atan2-Methode ist, macht und wie sie aufgebaut ist ;)

    Folgendes: Du hast die Punkte P1(x1 | y1) und P2(x2 | y2). Du möchtest den Winkel Alpha, da es ein rechtw. Dreieck ist, gilt: tan alpha = Gegenkathete / Ankathete. In diesem Fall ist die Gegenkathete y2 - y1 und die Ankathete x2 - x1. Folglich ist tan alpha = (y2 - y1) / (x2 - x1) bzw. alpha = atan((y2 - y1) / (x2 - x1)). Nun kann es aber bei dieser Seitenlängenberechnung rauskommen, dass negative Seitenlängen entstehen. Also müsstest du das vorher alles prüfen, in welchem Quadranten die Punkte liegen etc. Dafür gibt es in Programmiersprache meist die Atan2-Funktion, die macht das automatisch:

    VB.NET-Quellcode

    1. Dim rad = Math.Atan2(y2 - y1, x2 - x1)
    2. Dim deg = rad * 180 / Math.PI
    Bilder
    • Atan.png

      20,21 kB, 800×600, 154 mal angesehen
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Jou.

    va7 schrieb:

    wenn ich statt "Atan", "Atan2" auswähle, kommt ein Fehler.
    Atan hat ein Argument, Atan2 hat zwei Argumente:

    VB.NET-Quellcode

    1. w1 = Math.Atan(y / x) ' Geteilt durch zwischen y und y
    2. w2 = Math.Atan2(y, x) ' Komma zwischen y und y
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jetzt habe ich das verstanden.
    Die Formel wurde uns in der Aufgabenstellung vorgegeben und hab mich strikt an die Formel gehalten und
    diese gar nicht verändert.
    Aber wenn man den Atan2 benutzen will, dann muss man das ja logischerweise umschreiben bzw. so schreiben wie
    es die Atan-Methode verlangt.
    Vielen Dank!!!