Кривая Безье

Поделись знанием:
Перейти к: навигация, поиск

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

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

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

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

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





Определение

Кривая Безье — параметрическая кривая, задаваемая выражением

<math>\mathbf{B}(t)=\sum^n_{i=0} \mathbf{P}_i \mathbf{b}_{i,n}(t),\quad 0\leqslant t\leqslant 1</math>

где <math>\mathbf{P}_i</math> — функция компонент векторов опорных вершин, а <math>\mathbf{b}_{i,n}(t)</math> — базисные функции кривой Безье, называемые также полиномами Бернштейна.

<math>\mathbf{b}_{i,n}(t)={n \choose i} t^i(1-t)^{n-i}</math>,

где <math>{n \choose i}=\frac{n!}{i!(n-i)!}</math> — число сочетаний из <math>n</math> по <math>i</math>, где <math>n</math> — степень полинома, <math>i</math> — порядковый номер опорной вершины.

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

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

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

<math>\mathbf{B}(t)=(1-t)\mathbf{P}_0 + t\mathbf{P}_1 \quad t \in [0,1]</math>.

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

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

<math>\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]</math>.

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

<math>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</math>
<math>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 </math>
<math>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</math>

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

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

<math>\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]</math>.

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

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

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

<math>\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}</math>, где <math>\mathbf{M}_B</math> называется базисной матрицей Безье:

<math>\mathbf{M}_B = \begin{bmatrix}-1&3&-3&1\\3&-6&3&0\\-3&3&0&0\\1&0&0&0\end{bmatrix}</math>

В современных графических системах и форматах, таких как 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 и описывает квадратичную кривую Безье.

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

Для построения кривых высших порядков соответственно требуется и больше промежуточных точек. Для кубической кривой это промежуточные точки Q0, Q1 и Q2, описывающие квадратичные кривые, а также точки R0 и R1, которые описывают линейные кривые: более простое уравнение <math>\frac{P_{0}Q_{0}}{P_{0}Q_{1}}=\frac{Q_{1}P_{1}}{P_{1}P_{2}}=\frac{BQ_{0}}{Q_{1}Q_{0}}</math>.

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

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

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

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

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

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

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

Квадратичная кривая Безье с координатами <math>(x_0;y_0),\,(x_1;y_1),\,(x_2;y_2)</math> преобразовывается в кубическую кривую Безье с координатами <math>(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)</math>.

Напишите отзыв о статье "Кривая Безье"

Примечания

  1. World Wide Web Consortium (W3C). [www.w3.org/TR/SVG11/paths.html#PathDataCubicBezierCommands Scalable Vector Graphics (SVG) 1.1 (Second Edition). Chapter 8: Paths] (en-US) (16 августа 2011). — W3C Recommendation. Проверено 21 мая 2012. [www.webcitation.org/68f022wUw Архивировано из первоисточника 24 июня 2012].

Ссылки

  • Wolfram Math World [mathworld.wolfram.com/BezierCurve.html Bézier Curve]  (англ.)
  • American Mathematical Society [www.ams.org/samplings/feature-column/fcarc-bezier From Bézier to Bernstein]  (англ.)
  • Кривые Безье в компьютерных играх [3d-orange.com.ua/bezier-curves-for-your-games-tutorial]  (рус.)
  • [time100.ru/bizier Часы на кривых Безье]  (рус.)

Литература

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

См. также