2009-08-28 4 views
2

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

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

+0

Связанные ХТ р: // StackOverflow.ком/вопросы/3347483/запись-а-краска-программа-а-ля-мс-краска, как к интерполировать-между мышиным въезду накануне – kervin

ответ

2

Я знаю, что это старый вопрос, но у меня была такая же проблема, и я пришел с 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 коэффициентами для взвешенного среднего (Вы можете изменить их, чтобы получить нужные вам разглаживание :)

Я надеюсь, что это поможет

UPDATE 13 декабря: Вот это статья объясняя различные методы рисования, есть хорошие концепции, которые могут быть применены (край сглаживающий, кривые Безье, гладкие суставы)

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

0

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

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

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

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

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