Как минимизировать сохраненные точки из нарисованных точек, используя инструмент рисования в свободном потоке

В настоящее время я использую алгоритм "Douglas Peucker".

Моя проблема в том, что когда я рисую, ранее нарисованные линии также меняются, что, конечно, нереально. Есть ли другой альтернативный алгоритм, чтобы минимизировать сохраненные точки, но не изменять предыдущие нарисованные точки или другой способ изменить "Дуглас Пеккер", чтобы соответствовать моим потребностям?

1 ответ

Решение

Дайте вашему инструменту для рисования карандашом 2 дополнительных метода для рисования:

  • Нарисуйте новую точку на пути, используя mousemove (это ваш текущий метод произвольной формы). Эта опция позволит пользователю добавить много точек, что позволит им быть очень детализированными в их чертеже.

  • Нарисуйте новую точку на пути только после mousedown. Эта опция просто соединяет предыдущую точку на пути с вновь выбранной точкой. Эта опция позволит пользователю добавить только несколько очень прямых линий, которые позволят им очертить фигуры с длинными прямыми краями.

Если вас беспокоит изменение пути произвольной формы во время рисования пользователем, вы можете применить упрощающий алгоритм только один раз после того, как он перестал двигать мышь в течение 1 секунды.

Если вы укажете алгоритм Дугласа-Пекера, то для точности используйте высокое смещение, тогда упрощенный путь останется совершенно верным не упрощенному пути.

Кстати, если вы хотите нарисовать сплайны через ваши точки, то посмотрите этот хороший предыдущий пост: как нарисовать плавную кривую через N точек, используя JavaScript-холст HTML5?

Другие вопросы по тегам