Что вы ищете - это экстраполяция, а не интерполяция.
Я действительно очень удивлен, что в экстраполяции в Интернете так мало ресурсов. Если вы хотите узнать больше, вы должны прочитать некоторые числовые методы/математическую книгу и реализовать алгоритм самостоятельно.
Может быть достаточно простой линейной экстраполяции?
// You need two last points to extrapolate
-(double) getExtrapolatedValueAt:(double)x withPointA:(Point*)A andPointB(Point*)B
{
// X is time, Y is either longtitute or latitude.
return A.y + (x - A.x)/(B.x - A.x) * (B.y - A.y);
}
-(Point*) getExtrapolatedPointAtTime:(double)X fromLatitudeA:(Point*)latA andLatitudeB:(Point*)latB andLongtitudeA:(Point*)longA andLongtitudeB:(Coord*)longB
{
double extrapolatedLatitude = [self getExtraploatedValueAt:X withPointA:latA andPointB:latB];
double extrapolatedLongtitude = [self getExtrapolatedValueAt:X withPointA:longA andPointB:longB];
Coord* extrapolatedPoint = [Coord new];
extrapolatedPoint.longtitude = extrapolatedLongtitude;
extrapolatedPoint.latitude = extrapolatedLatitude;
return extrapolatedPoint;
}
Не уверен, что если бы я получил функцию права, но вы можете проверить здесь: http://en.wikipedia.org/wiki/Extrapolation
это очень легко.
Вы должны реализовать линейную экстраполяцию. Если вы обнаружите, что линейной экстраполяции недостаточно (для кривых, например), вы должны просто перебрать и изменить ее с помощью другого алгоритма экстраполяции.
Другим подходом было бы иметь задержку в 1 секунду в анимации и анимацию между двумя известными точками с использованием интерполяции. Я не знаю, приемлемо ли это для вашего случая использования.
только из любопытства: почему 10 Гц? При вождении автомобиля проблески каждых трех секунд слишком часто, чтобы держать дорогу и не ударять по препятствиям ... одна идея, чтобы получить это, чтобы использовать данные гироскопа и акселерометра ... – Volker
Потому что, если Apple сможет анимировать его гладко, мы также должны быть в состоянии. Взгляд может длиться 1-2 секунды, и за это время он должен двигаться по пути красиво и не прыгать. –
, если вы обновляете дважды в секунду и анимируете позицию через CoreAnimation, пользователь получит гладкое изображение ... если вы обновляете один раз в секунду и анимируете то же самое с временем анимации в одну секунду, это также должно сделать трюк. и намного проще, чем делать много математики. – Volker