AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus
Thema durchsuchen
Ansicht
Themen-Optionen

Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

Ein Thema von fox67 · begonnen am 20. Jun 2015 · letzter Beitrag vom 21. Jun 2015
Antwort Antwort
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#1

Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 20. Jun 2015, 23:13
Hallo
ich bin gerade Dabei ein Programm das eine Datei aus einem Fluglogger(aus einem Segelflieger) ausließt und dann eine Strecke raus optiemieren soll(wie z.B hier). Im Internet findet man nicht viel wie so ein Algorithmus funktionieren könnte, aber ich hab ein Quellcode gefunden auf github. Allerdings in C jetzt bin ich gerade dabei das Schritt für Schritt in Delphi umzusetzen. Aber beim berechnen der Distanzmatrix kommt bei einem bestimmten Punkt die Fehlermeldung daß es eine ungültige Gleitkommaoperation sei, obwohl es davor schon einige 1000 distanzen fehlerfrei ausgerechnet hat. Um den Fehler nachzuvollziehen gebe ich den Index der Zwei Punkte aus zwischen denen die Distanz berechnet wird in einer Memo aus. Der Fehler tritt zum erstenmal auf wenn er den 12 mit dem 51 Punkt vergleicht. Leider kann ich absolut nicht nachvollziehen warum der Fehler auftritt schließlich hat er ja davor schon einige tausen distanzen fehlerfrei berechnet. Im Anhang habe ich das komplette Projekt mit quellcode und der Logger datei(.IGC).
Das ist die Funktion in der der Fehler auftritt.
Delphi-Quellcode:
function TFlug.dpointtopoint(index1: Integer; index2: Integer) : integer;
var
dist,x : double;
sli,cli,lri : double;

begin
  sli := Punkte[index1].sinlat;
  cli := Punkte[index1].coslat;
  lri := Punkte[index1].lonrad;
  x := sli*Punkte[index2].sinlat;
  x := x + cli*Punkte[index2].coslat * cos(lri - Punkte[index2].lonrad);
  form10.Memo1.Text := 'i: '+ inttostr(index1) +'|j: '+inttostr(index2);
  Application.ProcessMessages;
  if (index1=12) and (index2=51) then
  begin
    dist := 0;

  end
  else dist := FAK*arccos(x);

  result := round(dist);
end;
Angehängte Dateien
Dateityp: 7z IGCParser.7z (218,7 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 21. Jun 2015, 00:16
Und jetzt?

Wir sollen uns also dein Projekt herunterladen und ausführen und selber herausfinden, welcher Fehler auftritt und auch selber die Werte der Koordinaten herausfinden um dir zu helfen?

Ist bei dir heute Ostern und Weihnachten zugleich?
Oder klemmt die Zwischenablage?

Also:

Fehlermeldung per CopyPaste hier posten und die Werte der beiden Koordinaten, bei denen dieser Fehler kommt, dann können wir uns den Download komplett schenken.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 21. Jun 2015, 00:37
Nein natürlich nicht, aber ich kann den Fehler absolut nicht nachvollziehen und hab gehofft des jemand hier im Forum villeicht so ein ähnlich es problem schon mal hatte? Der Fehler ensteht erst wenn der arcuscosinus berechnet wird. Was ich nicht verstehe davor hat das programm zig mal für den selben wert den arcuscosinus errechnet ohne probleme und da kommt aufeinnmal der Fehler. Die Distanz sollte 0 sein da x = 1 ist. Die Koordinaten sind: 51°18.014'N 014°07.87'E und der Punkt2 hat die selben Koordinaten, deshalb auch der Abstand 0.
Gruß Arni

Geändert von fox67 (21. Jun 2015 um 00:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.183 Beiträge
 
Delphi 12 Athens
 
#4

AW: Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 21. Jun 2015, 00:42
Zitat von arccos:
Die Werte von X müssen zwischen -1 und 1 liegen.
Und X ist da 1.

Aber wer benutzt schon den Debugger?
Haltepunkt auf den Anfang der Funktion und als Bedingung (index1 = 12) and (index2 = 55) angeben. (das sind übrigens die Werte, wo es immer knallt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Jun 2015 um 00:45 Uhr)
  Mit Zitat antworten Zitat
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 21. Jun 2015, 00:49
Die Fehler Nachricht ist im Anhang
Gruß Arni
  Mit Zitat antworten Zitat
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 21. Jun 2015, 00:52
Den Debugger habe ich benutzt, das x den wert 1 hat ist ganz normal das ist ca. bei den ersten 10 logs so und jedesmal wenn irgentein ereigniswar z.B: wenn ein neuer Flieger vom Kollisionswarngerät erfasst wurde. Da das Programm die ersten 10 werte geschluckt hat und beiden den war der wert x öfters 1 und auch bis zur fehlermeldung ist es bestimmt mehr als hundert mal aufgetreten das x= 1 ist daran kann der fehler eigentlich nicht liegen.
Gruß Arni
  Mit Zitat antworten Zitat
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Distanzberechnung zwischen zwei Koordinaten gibt manchmal eine Fehlermeldung aus

  Alt 21. Jun 2015, 01:26
So ganz schlüßig ist mir das Problem nicht anscheinend manchmal passiert nichts wenn x = 1 ist und manchmal kommt die fehlermeldung wenn x= 1 ist, dann hilft aber auch eine if(if x=1 then) abfrage nicht den er sieht die bedingung x=1 als false an(warum auch immer) Was alerdings hilft ist das x mithilfe von trunc in eine Integervariable umzuwandeln und dann zu überprüfen ob x = 1 ist dann klappt es einwandfrei. Gibt es eine erklärung warum 1 als double nicht immer gleich 1 ist?
Gruß Arni
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz