Лесни за използване криви на Безие

Написано на 15 септември 2012 г. .

Проста и ясна реализация на известни криви на Безие в C #.

програмиране

Кривите на Безие са най-фундаменталните криви, използвани предимно в компютърната графика и обработката на изображения. Тези криви се използват предимно за интерполация, апроксимация, изчертаване на криви и изобразяване на обекти. Тази статия показва по много прост и ясен начин как тези криви могат да бъдат конструирани и използвани.

Кривите на Безие са параметрични криви, изключително персонализирани и гладки, подходящи за много задачи. Те са кръстени на Пиер Безие, френски математик и инженер, който е разработил този метод на компютърно чертане в края на 1960 г., докато е работил за автомобилния производител Renault. Твърди се, че по същото време в хода на изследванията на Форд възниква същото развитие. Все още не е ясно кой първо ги е създал.

Статията се фокусира основно върху интерполацията и графичните криви. Когато интерполирате, трябва да намерите неизвестни токове, като използвате известни стойности. Набор от дискретни точки може да бъде представен като непрекъсната структура, като се получава строго определена крива за липсващите точки. Кривата се инициализира с определени базови точки и се опитва да генерира нови точки, които приближават (или интерполират) старите стойности.

Помислете за n +1 точки P 0, ..., Pn и свържете точките в многолиния, наричана по-долу контролния полигон.

всичко

При наличие на точки Pi, i = 0. n, нашата задача е да определим кривата g (t) за всички стойности на t? [0,1]. Идеята е показана по-долу:

използване

Основен алгоритъм

Целта тук е да се намерят точки в средата между две съседни точки и да се повтаря това, докато всички повторения бъдат изчерпани. Новите стойности на точките ще дадат кривата. Известното уравнение на Безие е точната формулировка на тази идея. Ето алгоритъма:

Стъпка 1: Изберете стойност за t? [0,1]. Тази стойност не се променя във всички други стъпки.

Стъпка 2: Задайте Pi [0] (t) = Pi, за i = 0. n .

Стъпка 3: За j = 0. n, задайте за i = j. н .

Стъпка 4: g (t) = Pn [n] (t)

Тук ще бъдат дадени формули за общите и специалните случаи, полезни в определени приложения. Кодът в статията не показва нито едно от тях, но използва обща формула. Нека започнем с обобщена формула:

За простота и конвенция, използвани в тази статия и код, най-добре е да представите тази формула по следния начин:

Това уравнение е само формулировка на горния алгоритъм (итерация в средната точка). Важно е целият алгоритъм да бъде сведен до формула и директното внедряване може да даде правилните резултати. Тук n означава броя на точките, а P означава самите точки. Факториалните коефициенти на точките се наричат ​​базисни функции на Бернщайн след създателя им.

Ето специални случаи:

Безие трета степен:

Това е функцията, която върши цялата работа. Той е много кратък и много прост. Тъй като имаме работа само с 2D криви, точките имат само координати X и Y. Функцията изчислява точките на Безие.

Останалите функции са просто спомагателни функции, които участват във факториални изчисления и изчисления на базисни функции, които са доста тривиални. За да използвате тази функция правилно, предайте й набор от точки във формат: XYXYXYXYXYXYXYXYXYXY. координати и колко точки трябва да изчислите на кривата. Функцията ще запълни масива p с точки на траекторията.

Интересни характеристики

Поради ограниченията на факториални изчисления, кодът изчислява само криви до 32 точки. По-сложните дизайни обикновено се представят с помощта на комбинация от данни за криви (както е в Adobe Photoshop, Illustrator и Flash - toolpath tool).

Въпреки че GDI (Graphics Device Interface) има вградена функция за изчисляване на кривата на Безие, не е препоръчително да използвате вградените библиотеки за обучение. GDI може да не винаги е в състояние да свърши работата вместо вас! Някъде, понякога може да се наложи да го приложите и дотогава трябва да имате приблизителна представа за това как работят тези криви.