работа, которую вы хотят делать падения в категорию «подгонка кривой». Существует множество различных алгоритмов для подгонки кривой, но почти все алгоритмы подгонки кривой можно разделить на две разные категории: интерполяцию и приближение. Алгоритмы интерполяции производят кривую, которая точно проходит через все точки данных, в то время как алгоритмы аппроксимации генерируют кривую, которая находится близко к точкам данных. Конечно, существуют и гибридные алгоритмы.
Поскольку вы хотите, чтобы точки данных были сглажены, вы должны искать алгоритмы аппроксимации. Для двух алгоритмов, которые вы упомянули: алгоритм RDP и алгоритм Schneider (тот, что в Paper.js), они оба являются алгоритмами аппроксимации. Таким образом, в основном вы можете использовать любой из них. Для RDP после получения упрощенного пути вы можете использовать создание сплайна Catmull Rom или сплайна Overhauser через вершины упрощенного пути для получения гладкой кривой. Однако у вас нет прямого контроля за отклонение между полученным сплайном и вершинами исходного пути.
Для алгоритма Schneider он начнется с подгонки точек данных кубической кривой Безье с граничными касательными ограничениями. Если отклонение от результирующей кривой слишком велико, то он разделит точки данных на две «области» и поместит каждую область данных с кубическими кривыми Безье с граничными касательными ограничениями. Этот процесс будет повторяться до тех пор, пока отклонение ко всем кривым Безье не будет достаточно маленьким.В результате получается серия кубических кривых Безье, соединенных в лучшем случае с непрерывностью C1 (скорее всего, это только G1). Кроме того, поскольку этот алгоритм оценивает конечные тангенсы от исходных точек данных, шум в точке данных будет влиять на оценку касания конца и, следовательно, на кубическую установку Безье.
Если вы можете потратить время на тему подгонки кривой, вы должны посмотреть на наименьшее квадратное фитинг с кривыми B-сплайнов. Это будет генерировать выходную кривую с высокой непрерывностью (C2 для кубических кривых B-сплайна, например). Если у вас мало времени на проведение, то алгоритм Шнайдера - хороший выбор, который уравновешивает баланс между стоимостью реализации (если вам нужно повторно реализовать его на определенном языке) и качеством полученной кривой.