Рисование гладкой линии из планшета ввода - PullRequest
2 голосов
/ 28 августа 2009

Когда пользователь перетаскивает стилусом по планшету, вы получаете серию координат. Вы хотите приблизить путь пера плавной линией, следуя только за несколькими точками выборки позади него. Как бы вы это сделали?

Другими словами, как бы вы нарисовали красивую плавную отзывчивую линию, когда пользователь рисует ее на своем планшете? Просто соединить точки прямыми линиями недостаточно. Реальные программы рисования намного лучше справляются с изгибом линии, независимо от того, насколько близко или далеко находятся точки отбора. Некоторые даже позволяют вам дать им число, чтобы указать количество сглаживания, которое нужно сделать, учитывая дрожащие ручки и руки. Где я могу научиться делать это?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Я знаю, что это старый вопрос, но у меня была та же проблема, и я пришел с 2 различными решениями:

  • Первый подход - использовать два разрешения: одно, когда пользователь вставляет точки пути, соединяя их прямыми линиями. Во-вторых, когда пользователь завершит обводку, удалите линии, нарисуйте и сплайнируйте их. Это должно быть более гладким, чем прямые.

  • Второй подход заключается в сглаживании новых точек с помощью взвешенного среднего значения предыдущей выбранной точки. Таким образом, каждый раз, когда вы получаете новую точку выборки [x1, y1] вместо того, чтобы рисовать ее напрямую, вы берете предыдущую точку выборки [x2, y2] и создаете новую промежуточную точку с взвешенным средним двух точек. Псевдокод может быть что-то вроде:

    newPoint = [x1, y1]; oldPoint = [x2, y2];

    point2Paint = [(x1 * 0,3) + (x2 * 0,7), (y1 * 0,3) + (y2 * 0,7)]; oldPoint = newPoint;

    Будучи 0,7 и 0,3, коэффициенты для взвешенного среднего значения (Вы можете изменить их, чтобы получить желаемое сглаживание:)

Надеюсь, это поможет

ОБНОВЛЕНИЕ 13 декабря: здесь есть статья, объясняющая различные методы рисования, есть хорошие концепции, которые можно применять (сглаживание кромок, кривые Безье, гладкие соединения)

http://perfectionkills.com/exploring-canvas-drawing-techniques/

0 голосов
/ 28 августа 2009

Мне никогда не приходилось реализовывать их (только для академических целей), но вы можете взглянуть на статью интерполяция Википедии.

Из статьи извлечено:

интерполяция - это метод построения новых точек данных в диапазоне дискретного набора известных точек данных.

В технике и науке у человека часто есть несколько точек данных, полученных путем выборки или эксперимента, и он пытается построить функцию, которая точно соответствует этим точкам данных. Это называется подгонкой кривой или регрессионным анализом. Интерполяция - это особый случай подбора кривой, при котором функция должна проходить точно через точки данных.

Надеюсь, это поможет.

...