Имеем постоянно обновляющиеся значения, которые необходимо быстро интерполировать.
К примеру по последним 4-м точкам. Т.е. постоянно первые значения удаляются и добавляются новые.
Для обычного сплайна по фиксированным точкам составил следующее, нужно дописать функцию добавления и удаления точек в массив с пересчетом сплайна:
//---------------------------------------------------------------------------
Здравствуйте, D.S.Khan, Вы писали:
DSK>Имеем постоянно обновляющиеся значения, которые необходимо быстро интерполировать. DSK>К примеру по последним 4-м точкам. Т.е. постоянно первые значения удаляются и добавляются новые. DSK>Для обычного сплайна по фиксированным точкам составил следующее, нужно дописать функцию добавления и удаления точек в массив с пересчетом сплайна:
Обязательно ли использовать глобальный интерпол. кубический сплайн с гладкостью второго порядка?
Если устроит гладкость первого порядка, то можно быстро считать локальный сплайн, например, Кэтмулл-Рома по четырем точкам.
Здравствуйте, MBo, Вы писали:
MBo>Обязательно ли использовать глобальный интерпол. кубический сплайн с гладкостью второго порядка? MBo>Если устроит гладкость первого порядка, то можно быстро считать локальный сплайн, например, Кэтмулл-Рома по четырем точкам.
Желательно использовать гладкость второго порядка, т.к. функция будет дважды интегрироваться, хочется как можно точнее получать данные.
Но подойдет для начала и первого порядка. Но мне нужно что-то именно в виде класса с функцией добавления точки, при этом которая сама будет следить:
если количество точек 4 то рисует сплайн между двумя первыми,
при добавлении следующей точки удаляет первую точку и рисует снова между двумя первыми и т.д.
Проблема в том что мой сплайн меня во всем устраивает, но не выходит именно добавлять и дорисовывать график.
Теряется связь между старыми точками и второй сплайн не дорисовывает предыдущий.
Здравствуйте, shvonder, Вы писали:
S>Например здесь.
Спасибо за ссылки, но проблема не в получении сплайна по существующим точкам, этого я добился.
Проблема в постоянном добавлении и удалении точек и этот процесс должен быть очень быстрым.
Т.е. пришли 4 точки, интерполировал первые две, жду следующую точку.
Далее пришла еще точка, удалил первую добавил следующую пересчитал снова интерполировал первые две.
При этом если смотреть на график он должен быть непрерывным и гладким. Шаг поступления точек переменный.
Здравствуйте, D.S.Khan, Вы писали: DSK>Спасибо за ссылки, но проблема не в получении сплайна по существующим точкам, этого я добился. DSK>Проблема в постоянном добавлении и удалении точек и этот процесс должен быть очень быстрым. DSK>Т.е. пришли 4 точки, интерполировал первые две, жду следующую точку. DSK>Далее пришла еще точка, удалил первую добавил следующую пересчитал снова интерполировал первые две. DSK>При этом если смотреть на график он должен быть непрерывным и гладким. Шаг поступления точек переменный.
Ну, вообще говоря, сплайн хорошо интерполирует внутри набора точек, и очень плохо экстраполирует вне его. Т.е. если вы продолжите сплайн за краевые точки, то увидите безобразную картину. И потом, кубический сплайн требует задания значений на краевых точках (первая, вторая производные, их комбинации). Это дело произвольное, в крайнем случае вы оцените их по первым 3 точкам. Так что продолжить единый глобальный сплайн через всё новые и новые поступающие точки, мне кажеться, не удасться. Но, во-первых, на сплайнах клином свет не сошёлся. Во-вторых, проблема явно не новая, да книжек по сплайнам горы (нет под рукой ссылки). В-третьих, вы не в том форуме спрашиваете, см. на этом же сайте "Общие вопр. программирования->Алгоритмы".
Re[4]: всё уже написано до нас
От:
Аноним
Дата:
07.03.08 21:16
Оценка:
Здравствуйте, shvonder, Вы писали:
Спасибо за советы и замечания, буду думать. Я вроде зашел в модерирование и попробовал перенести ветку в алгоритмы — у меня не вышло, наверно делаю что-то не так. Если будет возможность (может что-то, где-то встретится) скиньте ссылку или отпишите в каком направлении копать.
S>Ну, вообще говоря, сплайн хорошо интерполирует внутри набора точек, и очень плохо экстраполирует вне его. Т.е. если вы продолжите сплайн за краевые точки, то увидите безобразную картину. И потом, кубический сплайн требует задания значений на краевых точках (первая, вторая производные, их комбинации). Это дело произвольное, в крайнем случае вы оцените их по первым 3 точкам. Так что продолжить единый глобальный сплайн через всё новые и новые поступающие точки, мне кажеться, не удасться. Но, во-первых, на сплайнах клином свет не сошёлся. Во-вторых, проблема явно не новая, да книжек по сплайнам горы (нет под рукой ссылки). В-третьих, вы не в том форуме спрашиваете, см. на этом же сайте "Общие вопр. программирования->Алгоритмы".