Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kurswinkel Berechung (https://www.delphipraxis.net/132697-kurswinkel-berechung.html)

robinWie 17. Apr 2009 19:38


Kurswinkel Berechung
 
Hallo, ich bin gerade dabei mir eine Unit zusammenzubasteln wo einige Funktionen zu Koordinaten drin sind. Momentan versuche ich eine Funktion zu schreiben, die einem den Kurswinkel (N=0° O=90° S=180° W=270°) von einer Koordinate zu einer anderen Ausgibt.
Im Internet hab hier ich auch eine Rechung dazu gefunden (weiter unten unter Beispielsrechnung) Aber beim Umsetzten in Delphi hab ich Probleme. Da kommt irgendwie nie das raus, was eigentlich rauskommt.
Es soll der Ankunftswinkel ausgerechnet werden.

Das hier ist mein Bisheriger Ansatz
Delphi-Quellcode:
function Direction(Lat1, Lat2, Lon1, Lon2: Extended): Single;
var
 Lt1: single;
 LT2: single;
 LG1: single;
 LG2: single;
 DLA: Extended;
 c: Extended;
 w: Extended;
begin
  Lt1 := DegToRad(Lat1);
  Lt2 := DegToRad(Lat2);
  Lg1 := DegToRad(Lon1);
  Lg2 := DegToRad(Lon2);
  DLA := DegToRad(Lon1 - Lon2);

  C := Sin(Lt1) * Sin(Lt2) + Cos(Lt1) * Cos(Lt2) * Cos(DLA);
  W := (Sin(Lt1) - Sin(Lt2) * cos(C)) / (cos(Lt2) * sin(C));
  Result := RadToDeg(W);
end;
Ich hab das mit den Radiant (mit den Delphi arbeitet) und den Grad soweit berücksichtigt, indem ich am Anfang konvertiere und am Ende. Aber wie gesagt kommt immer das falsche Raus :gruebel:

Danke im Voraus
Robin

blink182 17. Apr 2009 20:38

Re: Kurswinkel Berechung
 
hiho
hab mir das eben mal bei wikipedia angeschaut und so wie es aussieht, hast du für die Berechnung der Strecke einmal den ArcCosinus vergessen ;) http://de.wikipedia.org/wiki/Orthodrome#Strecke
MfG blink182

robinWie 17. Apr 2009 22:18

Re: Kurswinkel Berechung
 
Thx für den Hinweis. Jetzt funktioniert es.. zumindest wenn man sich von West nach Ost bewegt^^ Aber ich denk mal um das richtige Ergebniss zu bekommen wenn man sich von Ost nach Webst bewegt muss man einfach 180+W rechnen...

Delphi-Quellcode:
function StartDirection(Lat1, Lat2, Lon1, Lon2: Extended): Single;
var
 Lt1: single;
 LT2: single;
 LG1: single;
 LG2: single;
 DLA: Extended;
 c: Extended;
 w: Extended;
begin
  Lt1 := DegToRad(Lat1);
  Lt2 := DegToRad(Lat2);

  Lg1 := DegToRad(Lon1);
  Lg2 := DegToRad(Lon2);
  DLA := DegToRad(Lon1 - Lon2);

  C := ArcCos(Sin(Lt1) * Sin(Lt2) + Cos(Lt1) * Cos(Lt2) * Cos(DLA));
  W := ArcCos((Sin(Lt2) - Sin(Lt1) * cos(C)) / (cos(Lt1) * sin(C)));
  Result := RadToDeg(W);
end;

blink182 17. Apr 2009 22:24

Re: Kurswinkel Berechung
 
ggf. musst du noch die Punkte weiter unten berücksichtigen siehe wikipedia ;) also ob man jetzt von A -> B oder von B -> A möchte ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz