То, что вы описываете, может быть связано с методами распознавания жестов, поэтому вы можете искать в них идеи.
Очевидный подход - применить подбор кривой, но это сгладит все интересные детали и изломы. Другой предложенный подход заключается в том, чтобы посмотреть на скорости и ускорения, но это может привести к волосатости (изменение направления может быть очень быстрым или очень медленным и преднамеренным)
Довольно простой, но эффективный подход заключается в упрощении образцов непосредственно в полилинию.
Например, пройдите по образцам (например) от образца 1 к образцу 4 и проверьте, лежат ли все 4 образца в пределах разумной погрешности прямой линии между 1 и 4. Если это так, то увеличьте это значение до 1..5 и повторять до тех пор, пока прямая линия от начальной точки к конечной точке больше не обеспечивает резонирующее приближение к кривой, определенной этими образцами. Создайте отрезок линии до предыдущей точки выборки и начните накапливать новый отрезок.
Вы должны быть осторожны с вашими пороговыми значениями, когда сэмплы расположены слишком близко друг к другу, поэтому вы можете настроить чувствительность, когда сэмплы расположены на расстоянии менее 4-5 пикселей друг от друга.
Это даст вам набор прямых линий, которые будут довольно точно следовать исходному пути.
Если вам требуется дополнительное сглаживание или вы хотите создать масштабируемую векторную графику, то вы можете затем подогнать кривую по полилинии. Сначала определите изгибы (места в вашей полилинии, где угол между одной линией и следующей острый - например, все, что больше 140 градусов, считается гладкой кривой, все, что меньше, чем считается изломом), и разбейте ломаную линию на этих разрывах , Затем изогните каждый из этих подразделов исходного жеста, чтобы сгладить их. Это будет иметь эффект сглаживания гладкой вещи и резкости перегибов. (Вы можете пойти дальше и вставить небольшие гладкие угловые филе вместо этих острых швов, чтобы уменьшить остроту соединений)
Грубая сила, но она может просто достичь того, что вы хотите.