Кривая Безье

Материал из testwiki
Перейти к навигации Перейти к поиску

Кривы́е Безье́ — типы кривых, предложенные в 60-х годах XX века независимо друг от друга Пьером Безье из автомобилестроительной компании «Рено» и Полем де Кастельжо из компании «Ситроен», где применялись для проектирования кузовов автомобилей.

Несмотря на то, что открытие де Кастельжо было сделано несколько ранее Безье (1959), его исследования не публиковались и скрывались компанией как производственная тайна до конца 1960-х.

Кривая Безье является частным случаем многочленов Бернштейна, описанных русским математиком Сергеем Натановичем Бернштейном в 1912 году.

Впервые кривые были представлены широкой публике в 1962 году французским инженером Пьером Безье, который, разработав их независимо от де Кастельжо, использовал их для компьютерного проектирования автомобильных кузовов. Кривые были названы именем Безье, а именем де Кастельжо назван разработанный им рекурсивный способ определения кривых (алгоритм де Кастельжо).

Впоследствии это открытие стало одним из важнейших инструментов систем автоматизированного проектирования и программ компьютерной графики.

Определение

Пусть в пространстве m размерности m1 над задана последовательность контрольных точек (𝐏0,,𝐏n), где n0, а 𝐏k=(x1,k,,xm,k) для k=0,,n.

Тогда множество {𝐁(t)|0t1} точек 𝐁(t)=(z1(t),,zm(t)) с координатами (zj(t))j=1,,m, параметрически задаваемыми выражениями

zj(t)=k=0nxj,kbk,n(t) для 0t1, где j=1,,m, а bk,n(t)=(nk)tk(1t)nk для k=0,,n,

называется кривой Безье.

Многочлен bk,n(t) степени n по параметру t называется базисной функцией (соответствующей контрольной точке 𝐏k) кривой Безье или полиномом Бернштейна.

Здесь (nk)=n!k!(nk)! — число сочетаний из n по k.

Замечания

  1. Кривая Безье, соответствующая как (𝐏0) так и (𝐏0,𝐏0,,𝐏0), есть точка 𝐏0.
  2. Кривая Безье, соответствующая паре (𝐏0,𝐏1), то есть при n=1, есть (линейно) параметризованный отрезок, соединяющий точку 𝐏0 (при t=0) с точкой 𝐏1 (при t=1).
  3. При любом порядке n0 кривая Безье содержит как точку 𝐏0 (это — образ параметра t=0), так и точку 𝐏n (это — образ параметра t=1).
  4. Кривая Безье (в общем случае, то есть если не выродилась в точку 𝐏0) ориентируема, поскольку является образом ориентированного отрезка [0;1]. Последовательностям контрольных точек (𝐏0,𝐏1,,𝐏n1,𝐏n) и (𝐏n,𝐏n1,,𝐏1,𝐏0) соответствуют кривые Безье, которые совпадают как множества точек, но имеют (в общем случае) противоположные ориентации.
  5. Кривые Безье, соответствующие последовательностям контрольных точек (𝐏0,𝐏1,𝐏2) и (𝐏0,𝐏2,𝐏1), при 𝐏1𝐏2 не совпадают.
  6. Если изменить (xj,0,,xj,n), то изменяется только zj(t).

Виды кривых Безье

Линейные кривые

Файл:TrueType 1 Line.PNG
Линейная кривая Безье

При n = 1 кривая представляет собой отрезок прямой линии, опорные точки P0 и P1 определяют его начало и конец. Кривая задаётся уравнением:

𝐁(t)=(1t)𝐏0+t𝐏1t[0,1].

Квадратичные кривые

Файл:TrueType 2 Arc.PNG
Квадратичная кривая Безье

Квадратичная кривая Безье (n = 2) задаётся тремя опорными точками: P0, P1 и P2.

𝐁(t)=(1t)2𝐏0+2t(1t)𝐏1+t2𝐏2,t[0,1].

Квадратичные кривые Безье в составе сплайнов используются для описания формы символов в шрифтах TrueType и в SWF-файлах.

t=𝐏0𝐏1±(𝐏02𝐏1+𝐏2)𝐁+𝐏12𝐏0𝐏2𝐏02𝐏1+𝐏2,𝐏02𝐏1+𝐏20
t=𝐁𝐏02(𝐏1𝐏0),𝐏02𝐏1+𝐏2=0,𝐏0𝐏1
t=𝐁𝐏0𝐏2𝐏1,𝐏0=𝐏1𝐏2

Кубические кривые

Кубическая кривая Безье

В параметрической форме кубическая кривая Безье (n = 3) описывается следующим уравнением:

𝐁(t)=(1t)3𝐏0+3t(1t)2𝐏1+3t2(1t)𝐏2+t3𝐏3,t[0,1].

Четыре опорные точки P0, P1, P2 и P3, заданные в 2- или 3-мерном пространстве, определяют форму кривой.

Линия берёт начало из точки P0, направляясь к P1 и заканчивается в точке P3, подходя к ней со стороны P2. То есть, кривая не проходит через точки P1 и P2, они используются для указания её направления. Длина отрезка между P0 и P1 определяет, как скоро кривая повернёт к P3.

В матричной форме кубическая кривая Безье записывается следующим образом:

𝐁(t)=[t3t2t1]𝐌B[𝐏0𝐏1𝐏2𝐏3],

где 𝐌B называется базисной матрицей Безье:

𝐌B=[1331363033001000]

В современных графических системах и форматах, таких как PostScript (а также основанных на нём форматах Adobe Illustrator и Portable Document Format (PDF)), Scalable Vector Graphics (SVG)[1], Metafont, CorelDraw и GIMP для представления криволинейных форм используются сплайны Безье, составленные из кубических кривых.

Построение кривых Безье

Линейные кривые

Параметр t в функции, описывающей линейный случай кривой Безье, определяет, где именно на расстоянии от P0 до P1 находится B(t). Например, при t = 0,25 значение функции B(t) соответствует четверти расстояния между точками P0 и P1. Параметр t изменяется от 0 до 1, а B(t) описывает отрезок прямой между точками P0 и P1.

Квадратичные кривые

Для построения квадратичных кривых Безье требуется выделение двух промежуточных точек Q0 и Q1 из условия, чтобы параметр t изменялся от 0 до 1:

  • Точка Q0 изменяется от P0 до P1 и описывает линейную кривую Безье.
  • Точка Q1 изменяется от P1 до P2 и также описывает линейную кривую Безье.
  • Точка B изменяется от Q0 до Q1 и описывает квадратичную кривую Безье.
Построение квадратичной кривой Безье
Анимация t: [0;1]

Кривые высших степеней

Для построения кривых высших порядков соответственно требуется больше промежуточных точек. Для кубической кривой это промежуточные точки Q0, Q1 и Q2, описывающие линейные кривые, а также точки R0 и R1, которые описывают квадратичные кривые: более простое уравнение P0Q0P0P1=Q1P1P1P2=BR0R1R0.

Построение кубической кривой Безье
Анимация t: [0;1]

Для кривых четвёртой степени это будут точки Q0, Q1, Q2 и Q3, описывающие линейные кривые, R0, R1 и R2, которые описывают квадратичные кривые, а также точки S0 и S1, описывающие кубические кривые Безье:

Построение кривой Безье 4-й степени
Анимация t: [0;1]

Свойства кривой Безье

  • непрерывность заполнения сегмента между начальной и конечной точками;
  • кривая всегда располагается внутри фигуры, образованной линиями, соединяющими контрольные точки;
  • при наличии только двух контрольных точек сегмент представляет собой прямую линию;
  • прямая линия образуется при коллинеарном (на одной прямой) размещении управляющих точек;
  • кривая Безье симметрична, то есть обмен местами между начальной и конечной точками (изменение направления траектории) не влияет на форму кривой;
  • масштабирование и изменение пропорций кривой Безье не нарушает её стабильности, поскольку с математической точки зрения она «аффинно инвариантна»;
  • изменение координат хотя бы одной из точек ведет к изменению формы всей кривой Безье;
  • любой частичный отрезок кривой Безье также является кривой Безье;
  • степень (порядок) кривой всегда на одну ступень меньше числа контрольных точек. Например, при трёх контрольных точках форма кривой — парабола, так как парабола — кривая 2-го порядка;
  • окружность не может быть описана параметрическим уравнением кривой Безье;
  • невозможно создать параллельные кривые Безье, за исключением тривиальных случаев (прямые линии и совпадающие кривые), хотя существуют алгоритмы, строящие приближённую параллельную кривую Безье с приемлемой для практики точностью.

Применение в компьютерной графике

Шаблон:Main Благодаря простоте задания и манипуляции кривые Безье нашли широкое применение в компьютерной графике для моделирования гладких линий. Кривая целиком лежит в выпуклой оболочке своих опорных точек. Это свойство кривых Безье с одной стороны значительно облегчает задачу нахождения точек пересечения кривых (если не пересекаются выпуклые оболочки опорных точек, то не пересекаются и сами кривые), а с другой стороны позволяет осуществлять интуитивно понятное управление параметрами кривой в графическом интерфейсе с помощью её опорных точек. Кроме того, аффинные преобразования кривой (перенос, масштабирование, вращение и др.) также могут быть осуществлены путём применения соответствующих трансформаций к опорным точкам.

Наибольшее значение имеют кривые Безье второй и третьей степеней (квадратичные и кубические). Кривые высших степеней при обработке требуют большего объёма вычислений и для практических целей используются реже. Для построения сложных по форме линий отдельные кривые Безье могут быть последовательно соединены друг с другом в сплайн Безье. Для того, чтобы обеспечить гладкость линии в месте соединения двух кривых, три смежные опорные точки обеих кривых должны лежать на одной прямой. В программах векторной графики, например Adobe Illustrator или Inkscape, подобные фрагменты известны под названием «путей» (path), а в 3DS Max и подобных программах 3D-моделирования кривые Безье имеют название «сплайны».

Преобразование квадратичных кривых Безье в кубические

Квадратичная кривая Безье с координатами (x0;y0),(x1;y1),(x2;y2) преобразовывается в кубическую кривую Безье с координатами (x0;y0),(x0+2(x1x0)3;y0+2(y1y0)3),(x1+x2x13;y1+y2y13),(x2;y2).

Уровень дискретизации Кривых Безье[2]

Уровень дискретизации определяется следующим образом:

|BnextBprev|=1

, то есть каждая следующая точка должна отличаться от предыдущей на 1 (допустим пиксель). Причём, если задать B следующим образом:

|k=0nn!k!×(nk)!×tnextk×(1tnext)nk×Pkk=0nn!k!×(nk)!×tprevk×(1tprev)nk×Pk|=1

Через него можно вычислить Δt.

Решим это уравнение для кривых Безье первого порядка (линейных):

B(t)=(1t)×P0+t×P1,0t1

B(t)={x=(1t)×P0x+t×P1xy=(1t)×P0y+t×P1y

Запишем разницу точек для одной оси:

|P0tnext×P0+tnext×P1P0+tprev×P0tprev×P1|=1

Вынесем общие множители за скобки:

|tnext×(P0P1)tprev×(P0P1)|=1

Найдём Δt:

Δt=|tnexttprev|=|1P0P1|

так можно вычислить уровень дискретизации для обхода конкретной оси кривой Безье определённого порядка. То есть Вам нужно получить 16 таких уравнений для кривых Безье с 1го по 16 порядок, она всегда задаётся точками, их координаты достаточно будет подставить в полученное уравнение, чтобы обойти кривую с минимальным однозначным уровнем дискретизации.

См. также

Шаблон:Навигация

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:Кривые