Posts: 7,529
Threads: 230
Joined: Aug 2007
(20.06.2015, 20:14)Toni Reitz Wrote: Das ist jetzt der Track ohne Zeitstempel. Zum Experimentieren. ;-)
Danke. Und ich habe damit auch den Grund dafür gefunden, warum Du solche Probleme damit hast: der Start- und der Zielpunkt sind identisch.
(20.06.2015, 20:14)Toni Reitz Wrote: Aber auf jeden Fall danke für die nette Antwort. So wie der Algorithmus beschrieben ist, und wie die Ergebnisse aussehen, scheint es, als ob man am Ende einer Kette von Intervallen gefährlich nahe an eine Division durch Null oder ähnliches kommt.
Das ist kein Problem.
--
Christian
Posts: 7,529
Threads: 230
Joined: Aug 2007
(20.06.2015, 20:25)Toni Reitz Wrote: Vielleicht ist brutale lineare Interpolation das einfachste:
[..]
Genau das passiert:
Code:
public static CompactCalendar intrapolateTime(NavigationPosition position, NavigationPosition predecessor, NavigationPosition successor) {
if (!predecessor.hasTime() || !successor.hasTime())
return null;
long timeDelta = abs(predecessor.calculateTime(successor));
Double distanceToPredecessor = predecessor.calculateDistance(position);
if (isEmpty(distanceToPredecessor))
return null;
Double distanceToSuccessor = position.calculateDistance(successor);
if (isEmpty(distanceToSuccessor))
return null;
Double distanceRatio = distanceToPredecessor / (distanceToPredecessor + distanceToSuccessor);
long time = (long) (predecessor.getTime().getTimeInMillis() + (double) timeDelta * distanceRatio);
return fromMillis(time);
}
Und dann überleg mal, wenn position die 2. Position, predecessor die 1. Position und successor die letzte Position (und damit wieder die erste Position) Deines Tracks sind.
Es funktioniert, wenn Du dann irgendwo in der Mitte des Tracks noch einer Position einen Zeitstempel gibtst.
(20.06.2015, 20:25)Toni Reitz Wrote: Auf jeden Fall aber danke - ich findes es toll, das es so ein Tool wie den Routeconverter überhaupt gibt.
Das freut mich.
--
Christian
Posts: 70
Threads: 3
Joined: Nov 2014
Diesen Spezialfall der identischen ersten und letzten Punkte kann man doch recht einfach vermeiden. Eine Prüfung des vorletzten Punktes bezüglich des Abstandes und ein sorgfältig gewählter Schwellwert sollten doch reichen, um die Zeit hinreichend genau zu interpolieren, ohne den "Teufelskreis" zu schliessen.