Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Wie mathematisch einer gewünschten Lösung nähern? (https://www.delphipraxis.net/175722-wie-mathematisch-einer-gewuenschten-loesung-naehern.html)

BUG 13. Jul 2013 23:29

AW: Wie mathematisch einer gewünschten Lösung nähern?
 
Ich glaube, es wäre ganz gut, wenn du mehr zu dem Problem erzählen würdest.
Ansonsten kann hier noch lange herumgeraten werden :mrgreen:

Luckie 14. Jul 2013 01:29

AW: Wie mathematisch einer gewünschten Lösung nähern?
 
Lass mich raten, du bist Geocacher? :D

LeisureSuitLarry 14. Jul 2013 13:44

AW: Wie mathematisch einer gewünschten Lösung nähern?
 
Näherungsweise (die Erde ist eher eliptisch) kann man den Abstand zwischen zwei Punkten auf der Erde so berechnen:
Delphi-Quellcode:
const
  RErde=6366.71; //Radius Erde in km
  torad:extended=pi/180;

{ Umwandlung ° in radiant } 
  Lat1:=la1*torad; // Latitude Punkt 1
  Lon1:=lo1*torad; // Longitude Punkt 1
  lat2:=la2*torad; // Latitude Punkt 1
  lon2:=lo2*torad; // Longitude Punkt 1


  Distanz:=ArcCOS(SIN(Lat1)*SIN(Lat2)+COS(Lat1)*COS(Lat2)*COS(Lon1-Lon2))*RErde; //Entfernung in km

Richtung in °
  if(SIN(Lat2-Lon2)<=0)
     then Richtung:=ARCCOS((SIN(Lon1)-SIN(Lat1)*COS(Distance))/(1E-28+(SIN(Distance)*COS(Lat1))))
     else Richtung:=2*pi-ARCCOS((SIN(Lon1)-SIN(Lat1)*COS(Distance))/(1E-28+(SIN(Distance)*COS(Lat1))));
  Reichtung:=Direction/torad; // Richtung in °
Manfred

Mavarik 17. Jul 2013 12:40

AW: Wie mathematisch einer gewünschten Lösung nähern?
 
Oder:

Delphi-Quellcode:
function GetDistanceBetween(lat1,Long1,lat2,Long2 : Double) : Double;
var
  F,G,L : Double;
  SF, SG, SL,
  CF, CG, CL : Double;
  W1, W2 : Double;
  S, C : Double;
  O,R,D : Double;
  H1, H2 : Double;
  ff : Double;
begin
  ff := 1 / 298.257;
  F := (lat1 + lat2) / 2;
  G := (lat1 - lat2) / 2;
  L := (long1 - long2) / 2;

  SF := Sin(F*Pi/180);
  SG := Sin(G*Pi/180);
  SL := Sin(L*Pi/180);
  CF := Cos(F*Pi/180);
  CG := Cos(G*Pi/180);
  CL := Cos(L*Pi/180);

  W1 := sqr(SG * CL);
  W2 := sqr(CF * SL);
  S := W1 + W2;

  W1 := sqr(CG * CL);
  W2 := sqr(SF * SL);
  C := W1 + W2;
  O := ArcTan(Sqrt(S/C));
  R := Sqrt(S*C) / O;
  D := 2 * O * 6378.14;

  H1 := (3*R-1) / (2*C);
  H2 := (3*R+1) / (2*S);

  W1 := sqr(SF * CG) * H1 * ff + 1;
  W2 := sqr(CF * SG) * H2 * ff;

  result := D * (W1 - W2);
end;
"Richtig"?!?

Mavarik

PS.: Gefunden... Nicht getippt... ;-)

jfheins 17. Jul 2013 19:43

AW: Wie mathematisch einer gewünschten Lösung nähern?
 
Jein. Oder "nur zum Teil"

Denn der TE möchte wohl gerade die Umkehrung: Von einer gegebenen Koordinate diejenige errechnen, die sich ergibt wenn man X km in eine Richtung geht. Dafür gibt es afaik keine direkt Funktion, deshalb muss man sich iterativ nähern.

Die Distanzberechnung wurde ja jetzt schon zum dritten Mal gepostet ( :roll: ) ist aber wohl nicht die Lösung des eigentlichen Problems. Welche Entfernungsnorm man verwendet ist ja für die iterative Näherung eigentlich von niederer Bedeutung.

Aber ohne eine Antwort des Thread-Erstellers hier herum zu raten ist imho nicht zielführend.

Mavarik 17. Jul 2013 22:47

AW: Wie mathematisch einer gewünschten Lösung nähern?
 
Zitat:

Zitat von jfheins (Beitrag 1221876)
Von einer gegebenen Koordinate diejenige errechnen, die sich ergibt wenn man X km in eine Richtung geht. Dafür gibt es afaik keine direkt Funktion, deshalb muss man sich iterativ nähern.

Daher meine Frage in welche Richtung...

Wenn ich von Kordinate Lat/Log z.b. 60NM in Richtung Osten gehe, kann ich ganz genau ausrechnen welche Koordinaten ich dann habe...

Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 Uhr.
Seite 2 von 2     12   

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