Перенос множества точек на кривую Безье - PullRequest
4 голосов
/ 15 февраля 2010

В моем приложении WPF я работаю над механизмом рисования, чтобы делать аннотации поверх изображений. На данный момент у меня есть функциональность для рисования путей, где мой нарисованный путь будет состоять из собранных точек на чертеже. Точнее, я добавляю StylusPoints в InkPresenter, когда собираю их через событие MouseMoved. InkPresenter устанавливается как дочерний элемент для Canvas, который будет содержать рисунки. Я также мог бы нарисовать LineSegment в Path, если это отличается?

Моя проблема с этим рисунком в том, что он не будет гладким. Поэтому я бы хотел, чтобы полученная кривая была представлена ​​в виде кривой Безье. Этот метод используется, например, в Adobe Illustrator. Сейчас; Есть ли способ справиться с этим? Сначала построить набор точек, представляющих выпуклую кривую, а затем преобразовать ее в кривую Безье, которая напоминает нарисованную кривую?

Ответы [ 2 ]

3 голосов
/ 15 февраля 2010

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

Вот PDF-файл о том, как подогнать Безье к четырем точкам , легко расширяемый до n. Это произошло из логова гуру Дона Ланкастера, у которого есть отличный набор учебных пособий по Безье .

2 голосов
/ 15 февраля 2010

Чарльз Петцольд имеет класс CanonicalSpline в примере кода для своей статьи «Линейная диаграмма с шаблонами данных» в журнале MSDN.

Пример кода

Ключевой метод класса создает PathGeometry из набора точек.

...