Кривая Безье

Материал из Википедии — свободной энциклопедии
Текущая версия страницы покане проверялась опытными участниками и может значительно отличаться отверсии, проверенной 6 мая 2019 года; проверки требуют35 правок.
Перейти к навигацииПерейти к поиску

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

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

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

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

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

Содержание

Определение

[править |править код]

Пусть в пространствеRm{\displaystyle \mathbb {R} ^{m}}размерностиm1{\displaystyle m\geqslant 1}надR{\displaystyle \mathbb {R} }задана последовательность контрольных точек(P0,,Pn){\displaystyle (\mathbf {P} _{0},\ldots ,\mathbf {P} _{n})},гдеn0{\displaystyle n\geqslant 0}Pk=(x1,k,,xm,k){\displaystyle \mathbf {P} _{k}=(x_{1,k},\ldots ,x_{m,k})}дляk=0,,n{\displaystyle k=0,\ldots ,n}.

Тогда множество{B(t)|0t1}{\displaystyle \left\{\mathbf {B} (t)|0\leqslant t\leqslant 1\right\}}точекB(t)=(z1(t),,zm(t)){\displaystyle \mathbf {B} (t)=(z_{1}(t),\ldots ,z_{m}(t))}с координатами(zj(t))j=1,,m{\displaystyle (z_{j}(t))_{j=1,\ldots ,m}}, параметрически задаваемыми выражениями

zj(t)=k=0nxj,kbk,n(t){\displaystyle z_{j}(t)=\sum _{k=0}^{n}x_{j,k}b_{k,n}(t)\quad } для0t1,{\displaystyle \quad 0\leqslant t\leqslant 1,\quad } гдеj=1,,m,{\displaystyle \quad j=1,\ldots ,m,\quad } аbk,n(t)=(nk)tk(1t)nk{\displaystyle \quad b_{k,n}(t)={n \choose k}t^{k}(1-t)^{n-k}\quad } дляk=0,,n{\displaystyle \quad k=0,\ldots ,n},

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

Многочленbk,n(t){\displaystyle b_{k,n}(t)}степениn{\displaystyle n}по параметруt{\displaystyle t}называется базисной функцией (соответствующей контрольной точкеPk{\displaystyle \mathbf {P} _{k}}) кривой Безье илиполиномом Бернштейна.

Здесь(nk)=n!k!(nk)!{\displaystyle {n \choose k}={\frac {n!}{k!(n-k)!}}} — числосочетанийизn{\displaystyle n}поk{\displaystyle k}.

Замечания

[править |править код]
  1. Кривая Безье, соответствующая как(P0){\displaystyle (\mathbf {P} _{0})} так и(P0,P0,,P0){\displaystyle (\mathbf {P} _{0},\mathbf {P} _{0},\ldots ,\mathbf {P} _{0})}, есть точкаP0{\displaystyle \mathbf {P} _{0}}.
  2. Кривая Безье, соответствующая паре(P0,P1){\displaystyle (\mathbf {P} _{0},\mathbf {P} _{1})}, то есть приn=1{\displaystyle n=1}, есть (линейно) параметризованный отрезок, соединяющий точкуP0{\displaystyle \mathbf {P} _{0}} (приt=0{\displaystyle t=0}) с точкойP1{\displaystyle \mathbf {P} _{1}} (приt=1{\displaystyle t=1}).
  3. При любом порядкеn0{\displaystyle n\geqslant 0} кривая Безье содержит как точкуP0{\displaystyle \mathbf {P} _{0}} (это — образ параметраt=0{\displaystyle t=0}), так и точкуPn{\displaystyle \mathbf {P} _{n}} (это — образ параметраt=1{\displaystyle t=1}).
  4. Кривая Безье (в общем случае, то есть если не выродилась в точкуP0{\displaystyle \mathbf {P} _{0}}) ориентируема, поскольку является образом ориентированного отрезка[0;1]{\displaystyle [0;1]}. Последовательностям контрольных точек(P0,P1,,Pn1,Pn){\displaystyle (\mathbf {P} _{0},\mathbf {P} _{1},\ldots ,\mathbf {P} _{n-1},\mathbf {P} _{n})} и(Pn,Pn1,,P1,P0){\displaystyle (\mathbf {P} _{n},\mathbf {P} _{n-1},\ldots ,\mathbf {P} _{1},\mathbf {P} _{0})} соответствуют кривые Безье, которые совпадают как множества точек, но имеют (в общем случае) противоположные ориентации.
  5. Кривые Безье, соответствующие последовательностям контрольных точек(P0,P1,P2){\displaystyle (\mathbf {P} _{0},\mathbf {P} _{1},\mathbf {P} _{2})} и(P0,P2,P1){\displaystyle (\mathbf {P} _{0},\mathbf {P} _{2},\mathbf {P} _{1})}, приP1P2{\displaystyle \mathbf {P} _{1}\neq \mathbf {P} _{2}} не совпадают.
  6. Если изменить(xj,0,,xj,n){\displaystyle (x_{j,0},\ldots ,x_{j,n})}, то изменяется толькоzj(t){\displaystyle z_{j}(t)}.

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

[править |править код]

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

[править |править код]
Линейная кривая Безье

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

B(t)=(1t)P0+tP1t[0,1]{\displaystyle \mathbf {B} (t)=(1-t)\mathbf {P} _{0}+t\mathbf {P} _{1}\quad t\in [0,1]}.

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

[править |править код]
Квадратичная кривая Безье

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

B(t)=(1t)2P0+2t(1t)P1+t2P2,t[0,1]{\displaystyle \mathbf {B} (t)=(1-t)^{2}\mathbf {P} _{0}+2t(1-t)\mathbf {P} _{1}+t^{2}\mathbf {P} _{2},\quad t\in [0,1]}.

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

t=P0P1±(P02P1+P2)B+P12P0P2P02P1+P2,P02P1+P20{\displaystyle t={\frac {\mathbf {P} _{0}-\mathbf {P} _{1}\pm {\sqrt {(\mathbf {P} _{0}-2\mathbf {P} _{1}+\mathbf {P} _{2})\mathbf {B} +\mathbf {P} _{1}^{2}-\mathbf {P} _{0}\mathbf {P} _{2}}}}{\mathbf {P} _{0}-2\mathbf {P} _{1}+\mathbf {P} _{2}}},\quad \mathbf {P} _{0}-2\mathbf {P} _{1}+\mathbf {P} _{2}\neq 0}
t=BP02(P1P0),P02P1+P2=0,P0P1{\displaystyle t={\frac {\mathbf {B} -\mathbf {P} _{0}}{2(\mathbf {P} _{1}-\mathbf {P} _{0})}},\quad \mathbf {P} _{0}-2\mathbf {P} _{1}+\mathbf {P} _{2}=0,\quad \mathbf {P} _{0}\neq \mathbf {P} _{1}}
t=BP0P2P1,P0=P1P2{\displaystyle t={\sqrt {\frac {\mathbf {B} -\mathbf {P} _{0}}{\mathbf {P} _{2}-\mathbf {P} _{1}}}},\quad \mathbf {P} _{0}=\mathbf {P} _{1}\neq \mathbf {P} _{2}}

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

[править |править код]
Кубическая кривая Безье

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

B(t)=(1t)3P0+3t(1t)2P1+3t2(1t)P2+t3P3,t[0,1]{\displaystyle \mathbf {B} (t)=(1-t)^{3}\mathbf {P} _{0}+3t(1-t)^{2}\mathbf {P} _{1}+3t^{2}(1-t)\mathbf {P} _{2}+t^{3}\mathbf {P} _{3},\quad t\in [0,1]}.

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

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

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

B(t)=[t3t2t1]MB[P0P1P2P3]{\displaystyle \mathbf {B} (t)={\begin{bmatrix}t^{3}&t^{2}&t&1\end{bmatrix}}\mathbf {M} _{B}{\begin{bmatrix}\mathbf {P} _{0}\\\mathbf {P} _{1}\\\mathbf {P} _{2}\\\mathbf {P} _{3}\end{bmatrix}}},

гдеMB{\displaystyle \mathbf {M} _{B}} называется базисной матрицей Безье:

MB=[1331363033001000]{\displaystyle \mathbf {M} _{B}={\begin{bmatrix}-1&3&-3&1\\3&-6&3&0\\-3&3&0&0\\1&0&0&0\end{bmatrix}}}

В современных графических системах и форматах, таких как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{\displaystyle {\frac {P_{0}Q_{0}}{P_{0}P_{1}}}={\frac {Q_{1}P_{1}}{P_{1}P_{2}}}={\frac {BR_{0}}{R_{1}R_{0}}}}.

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

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

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

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

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

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

[править |править код]
Основная статья:Компьютерная графика

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

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

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

[править |править код]

Квадратичная кривая Безье с координатами(x0;y0),(x1;y1),(x2;y2){\displaystyle (x_{0};y_{0}),\,(x_{1};y_{1}),\,(x_{2};y_{2})} преобразовывается в кубическую кривую Безье с координатами(x0;y0),(x0+2(x1x0)3;y0+2(y1y0)3),(x1+x2x13;y1+y2y13),(x2;y2){\displaystyle (x_{0};y_{0}),\,\left(x_{0}+{\frac {2\cdot (x_{1}-x_{0})}{3}};y_{0}+{\frac {2\cdot (y_{1}-y_{0})}{3}}\right),\,\left(x_{1}+{\frac {x_{2}-x_{1}}{3}};y_{1}+{\frac {y_{2}-y_{1}}{3}}\right),\,(x_{2};y_{2})}.

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

[править |править код]

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

|BnextBprev|=1{\displaystyle |B_{next}-B_{prev}|=1}

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

|k=0nn!k!×(nk)!×tnextk×(1tnext)nk×Pkk=0nn!k!×(nk)!×tprevk×(1tprev)nk×Pk|=1{\displaystyle \left\vert \sum _{k=0}^{n}{{\frac {n!}{k!\times (n-k)!}}\times t_{next}^{k}\times (1-t_{next})^{n-k}\times P_{k}}-\sum _{k=0}^{n}{{\frac {n!}{k!\times (n-k)!}}\times t_{prev}^{k}\times (1-t_{prev})^{n-k}\times P_{k}}\right\vert =1}

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

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

B(t)=(1t)×P0+t×P1,0t1{\displaystyle B(t)=(1-t)\times P_{0}+t\times P_{1},0\leq t\leq 1}

B(t)={x=(1t)×P0x+t×P1xy=(1t)×P0y+t×P1y{\displaystyle B(t)={\begin{cases}x=(1-t)\times P_{0_{x}}+t\times P_{1_{x}}\\y=(1-t)\times P_{0_{y}}+t\times P_{1_{y}}\end{cases}}}

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

|P0tnext×P0+tnext×P1P0+tprev×P0tprev×P1|=1{\displaystyle {\left\vert P_{0}-t_{next}\times P_{0}+t_{next}\times P_{1}-P_{0}+t_{prev}\times P_{0}-t_{prev}\times P_{1}\right\vert }=1}

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

|tnext×(P0P1)tprev×(P0P1)|=1{\displaystyle {\left\vert t_{next}\times (P_{0}-P_{1})-t_{prev}\times (P_{0}-P_{1})\right\vert }=1}

НайдёмΔt{\displaystyle \Delta {t}}:

Δt=|tnexttprev|=|1P0P1|{\displaystyle \Delta {t}={\left\vert t_{next}-t_{prev}\right\vert }=\left\vert {\frac {1}{P_{0}-P_{1}}}\right\vert }

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

См. также

[править |править код]

Примечания

[править |править код]
  1. World Wide Web Consortium (W3C). Scalable Vector Graphics (SVG) 1.1 (Second Edition). Chapter 8: Paths (англ.) (16 августа 2011). — W3C Recommendation. Дата обращения: 21 мая 2012. Архивировано 24 июня 2012 года.
  2. Алгоритмы: Кривые Безье . designermanuals.blogspot.com. Дата обращения: 9 января 2021. Архивировано 12 января 2021 года.

Литература

[править |править код]
  • Роджерс Д., Адамс Дж. Математические основы машинной графики. —М.: Мир, 2001.

Ссылки

[править |править код]
Перейти к шаблону «Кривые»
Определения
Преобразованные
Неплоские
Плоские
алгебраические
Конические сечения
3-й порядок (Кубика)
Эллиптические
Другие
4-й порядок
Лемнискаты
Аппроксимационные
Циклоидальные
Другие
Плоские
трансцендентные
Спирали
Циклоидальные
Другие
Фрактальные
Простые
Топологические
Источник —https://ru.wikipedia.org/w/index.php?title=Кривая_Безье&oldid=150156945
Категории:
Скрытые категории: