Это не официальный сайт wikipedia.org 01.01.2023

Кривая Безье — Википедия

Кривая Безье

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

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

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

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

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

ОпределениеПравить

Пусть в пространстве R m   размерности m 1   над R   задана последовательность контрольных точек ( P 0 , , P n )  , где n 0  , а P k = ( x 1 , k , , x m , k )   для k = 0 , , n  .

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

z j ( t ) = k = 0 n x j , k b k , n ( t )   для 0 t 1 ,   где j = 1 , , m ,   а b k , n ( t ) = ( n k ) t k ( 1 t ) n k   для k = 0 , , n  ,

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

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

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

ЗамечанияПравить

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

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

Линейные кривыеПравить

 
Линейная кривая Безье

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

B ( t ) = ( 1 t ) P 0 + t P 1 t [ 0 , 1 ]  .

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

 
Квадратичная кривая Безье

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

B ( t ) = ( 1 t ) 2 P 0 + 2 t ( 1 t ) P 1 + t 2 P 2 , t [ 0 , 1 ]  .

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

t = P 0 P 1 ± ( P 0 2 P 1 + P 2 ) B + P 1 2 P 0 P 2 P 0 2 P 1 + P 2 , P 0 2 P 1 + P 2 0  
t = B P 0 2 ( P 1 P 0 ) , P 0 2 P 1 + P 2 = 0 , P 0 P 1  
t = B P 0 P 2 P 1 , P 0 = P 1 P 2  

Кубические кривыеПравить

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

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

B ( t ) = ( 1 t ) 3 P 0 + 3 t ( 1 t ) 2 P 1 + 3 t 2 ( 1 t ) P 2 + t 3 P 3 , t [ 0 , 1 ]  .

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

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

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

B ( t ) = [ t 3 t 2 t 1 ] M B [ P 0 P 1 P 2 P 3 ]  ,

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

M B = [ 1 3 3 1 3 6 3 0 3 3 0 0 1 0 0 0 ]  

В современных графических системах и форматах, таких как 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, которые описывают квадратичные кривые: более простое уравнение P 0 Q 0 P 0 P 1 = Q 1 P 1 P 1 P 2 = B R 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-моделирования кривые Безье имеют название «сплайны».

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

Квадратичная кривая Безье с координатами ( x 0 ; y 0 ) , ( x 1 ; y 1 ) , ( x 2 ; y 2 )   преобразовывается в кубическую кривую Безье с координатами ( x 0 ; y 0 ) , ( x 0 + 2 ( x 1 x 0 ) 3 ; y 0 + 2 ( y 1 y 0 ) 3 ) , ( x 1 + x 2 x 1 3 ; y 1 + y 2 y 1 3 ) , ( x 2 ; y 2 )  .

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

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

| B n e x t B p r e v | = 1  

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

| k = 0 n n ! k ! × ( n k ) ! × t n e x t k × ( 1 t n e x t ) n k × P k k = 0 n n ! k ! × ( n k ) ! × t p r e v k × ( 1 t p r e v ) n k × P k | = 1  

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

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

B ( t ) = ( 1 t ) × P 0 + t × P 1 , 0 t 1  

B ( t ) = { x = ( 1 t ) × P 0 x + t × P 1 x y = ( 1 t ) × P 0 y + t × P 1 y  

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

| P 0 t n e x t × P 0 + t n e x t × P 1 P 0 + t p r e v × P 0 t p r e v × P 1 | = 1  

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

| t n e x t × ( P 0 P 1 ) t p r e v × ( P 0 P 1 ) | = 1  

Найдём Δ t  :

Δ t = | t n e x t t p r e v | = | 1 P 0 P 1 |  

так можно вычислить уровень дискретизации для обхода конкретной оси кривой Безье определённого порядка. То есть Вам нужно получить 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.

СсылкиПравить