Алгоритм де Кастельжо: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
битая ссылка
Метка: ручная отмена
 
(не показано 15 промежуточных версий 13 участников)
Строка 1: Строка 1:
В [[Вычислительная математика|вычислительной математике]] '''алгоритм де Кастельжо''', названный в честь его изобретателя [[де Кастельжо, Поль|Поля де Кастельжо]] — рекурсивный метод определения формы [[Многочлен Бернштейна|многочленов Бернштейна]] или [[Кривые Безье|кривых Безье]]. '''Алгоритм де Кастельжо''' также может быть использован для разделения кривой Безье на две части по произвольному значению [[Параметр|параметра]] <math>(t)</math>.
{{Инкубатор, Проверить статью}}


Достоинством [[Алгоритм|алгоритма]] является его более высокая [[вычислительная устойчивость]] по сравнению с прямым методом.
В [[Вычислительная_математика|вычислительной математике]] '''алгоритм де Кастельжо''', названный в честь его изобретателя [[де_Кастельжо,_Поль|Поля де Кастельжо]] — рекурсивный метод определения формы [[Многочлен_Бернштейна|многочленов Бернштейна]] или [[Кривые_Безье|кривых Безье]]. '''Алгоритм де Кастельжо''' также может быть использован для разделения кривой Безье на две части по произвольному значению [[Параметр|параметра]] <math>(t)</math>.


== Описание ==
Достоинством [[Алгоритм|алгоритма]] является его более высокая [[Вычислительная устойчивость|вычислительная устойчивость]] по сравнению с прямым методом.
Задан [[многочлен]] Бернштейна ''B'' степени ''n''

==Описание==
Задан [[Многочлен|многочлен]] Бернштейна ''B'' степени ''n''


:<math>B(t) = \sum_{i=0}^{n}\beta_{i}b_{i,n}(t),</math>
:<math>B(t) = \sum_{i=0}^{n}\beta_{i}b_{i,n}(t),</math>


где ''b'' — базис [[Многочлен_Бернштейна|многочлена Бернштейна]], многочлен в точке ''t''<sub>0</sub> может быть определен с помощью [[Рекуррентная_формула|рекуррентного соотношения]]
где ''b'' — базис [[Многочлен Бернштейна|многочлена Бернштейна]], многочлен в точке ''t''<sub>0</sub> может быть определен с помощью [[Рекуррентная формула|рекуррентного соотношения]]


:<math>\beta_i^{(0)} := \beta_i \mbox{ , } i=0,\ldots,n</math>
:<math>\beta_i^{(0)} := \beta_i \mbox{ , } i=0,\ldots,n</math>
Строка 24: Строка 22:
:<math>\beta_0^{(n)},\beta_1^{(n-1)},\ldots,\beta_n^{(0)}</math>
:<math>\beta_0^{(n)},\beta_1^{(n-1)},\ldots,\beta_n^{(0)}</math>


==Геометрическая интерпретация==
== Геометрическая интерпретация ==
Геометрическая интерпретация '''алгоритма де Кастельжо''' проста:
Геометрическая интерпретация '''алгоритма де Кастельжо''' проста:


*Задана кривая Безье с опорными точками <math>\scriptstyle P_0,...,P_n</math>. Соединив последовательно опорные точки с первой по последнюю, получаем [[Ломаная|ломаную линию]].
* Задана кривая Безье с опорными точками <math>\scriptstyle P_0,...,P_n</math>. Соединив последовательно опорные точки с первой по последнюю, получаем [[Ломаная|ломаную линию]].
*Разделяем каждый полученный [[Отрезок|отрезок]] этой ломаной в соотношении <math>\scriptstyle t : (1-t)</math> и соединяем полученные точки. В результате получаем ломаную линию с количеством отрезков, меньшим на один, чем исходная ломаная линия.
* Разделяем каждый полученный [[отрезок]] этой ломаной в соотношении <math>\scriptstyle t : (1-t)</math> и соединяем полученные точки. В результате получаем ломаную линию с количеством отрезков, меньшим на один, чем исходная ломаная линия.
*Повторяем процесс до тех пор, пока не получим единственную точку. Эта точка и будет являться точкой на заданной кривой Безье с параметром <math>\scriptstyle t</math>.
* Повторяем процесс до тех пор, пока не получим единственную точку. Эта точка и будет являться точкой на заданной кривой Безье с параметром <math>\scriptstyle t</math>.


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


[[Image:DeCasteljau1.svg]]
[[Файл:DeCasteljau1.svg]]


Следует заметить, что полученные в процессе построения промежуточные точки являются опорными точками для двух новых кривых Безье, в точности совпадающих с исходной, и в совокупности дающих исходную кривую Безье. Этот алгоритм не только определяет точку кривой в <math>\scriptstyle t</math>, но и делит кривую на две части в <math>\scriptstyle t</math>, а также предоставляет описание двух суб-кривых в форме Безье (в [[Параметрическое_представление|параметрическом представлении]]).
Следует заметить, что полученные в процессе построения промежуточные точки являются опорными точками для двух новых кривых Безье, в точности совпадающих с исходной, и в совокупности дающих исходную кривую Безье. Этот алгоритм не только определяет точку кривой в <math>\scriptstyle t</math>, но и делит кривую на две части в <math>\scriptstyle t</math>, а также предоставляет описание двух суб-кривых в форме Безье (в [[Параметрическое представление|параметрическом представлении]]).


Описанный алоритм справедлив для нерациональных кривых Безье. Для вычисления рациональных кривых в <math>\scriptstyle \mathbf{R}^n</math>, можно спроецировать точку в <math>\scriptstyle \mathbf{R}^{n+1}</math>; например кривая в трехмерном пространстве должна иметь опорные точки <math>\scriptstyle \{(x_i, y_i, z_i)\}</math> и веса <math>\scriptstyle \{w_i\}</math> спроецированные в весовые контрольные точки <math>\scriptstyle \{(w_ix_i, w_iy_i, w_iz_i, w_i)\}</math>. Затем обычно алгоритм переходит к [[Интерполяция|интерполяции]] в <math>\scriptstyle \mathbf{R}^4</math>. Результирующие четырехмерные точки могут быть спроецированы обратно в трехмерное пространство с помощью перспективного деления.
Описанный алгоритм справедлив для нерациональных кривых Безье. Для вычисления рациональных кривых в <math>\scriptstyle \mathbf{R}^n</math>, можно спроецировать точку в <math>\scriptstyle \mathbf{R}^{n+1}</math>; например кривая в трехмерном пространстве должна иметь опорные точки <math>\scriptstyle \{(x_i, y_i, z_i)\}</math> и веса <math>\scriptstyle \{w_i\}</math> спроецированные в весовые контрольные точки <math>\scriptstyle \{(w_ix_i, w_iy_i, w_iz_i, w_i)\}</math>. Затем обычно алгоритм переходит к [[Интерполяция|интерполяции]] в <math>\scriptstyle \mathbf{R}^4</math>. Результирующие четырехмерные точки могут быть спроецированы обратно в трехмерное пространство с помощью перспективного деления.


В целом, операции с рациональными кривыми (или поверхностями) эквивалентны операциям с нерационалиными кривыми в [[Проективное_пространство|проективном пространстве]]. Представление опорных точек как взвешенных часто бывает удобно для определения рациональных кривых.
В целом, операции с рациональными кривыми (или поверхностями) эквивалентны операциям с нерациональными кривыми в [[Проективное пространство|проективном пространстве]]. Представление опорных точек как взвешенных часто бывает удобно для определения рациональных кривых.


==См. также==
== Ссылки ==
* [http://www.rsdn.ru/article/multimedia/Bezier.xml Адаптивное разбиение кривых Безье]

== См. также ==
* [[Кривая Безье]]
* [[Кривая Безье]]
* [[Многочлен Бернштейна]]
* [[Многочлен Бернштейна]]
* [[Кривая]]
* [[Кривая]]
* [[де Кастельжо, Поль| Поль де Кастельжо]]
* [[де Кастельжо, Поль|Поль де Кастельжо]]
* [[Безье,_Пьер|Пьер Безье]]
* [[Безье, Пьер|Пьер Безье]]
* [[Бернштейн,_Сергей_Натанович|Сергей Натанович Бернштейн]]
* [[Бернштейн, Сергей Натанович|Сергей Натанович Бернштейн]]



[[Категория:Алгоритмы]]
[[Категория:Алгоритмы]]
Строка 56: Строка 56:
[[Категория:Математические основы компьютерной графики]]
[[Категория:Математические основы компьютерной графики]]
[[Категория:Численные методы]]
[[Категория:Численные методы]]

[[en:De_Casteljau's_algorithm]]
[[cs:Algoritmus de Casteljau]]
[[de:De Casteljau-Algorithmus]]
[[fr:Algorithme de De Casteljau]]
[[es:Algoritmo de de Casteljau]]
[[it:Algoritmo di de Casteljau]]
[[pl:Algorytm de Casteljau]]
[[zh:De Casteljau算法]]

Текущая версия от 02:19, 19 января 2023

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

Достоинством алгоритма является его более высокая вычислительная устойчивость по сравнению с прямым методом.

Задан многочлен Бернштейна B степени n

где b — базис многочлена Бернштейна, многочлен в точке t0 может быть определен с помощью рекуррентного соотношения

Тогда определение в точке может быть определено в шагов алгоритма. Результат дан по:

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

Геометрическая интерпретация

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

Геометрическая интерпретация алгоритма де Кастельжо проста:

  • Задана кривая Безье с опорными точками . Соединив последовательно опорные точки с первой по последнюю, получаем ломаную линию.
  • Разделяем каждый полученный отрезок этой ломаной в соотношении и соединяем полученные точки. В результате получаем ломаную линию с количеством отрезков, меньшим на один, чем исходная ломаная линия.
  • Повторяем процесс до тех пор, пока не получим единственную точку. Эта точка и будет являться точкой на заданной кривой Безье с параметром .

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

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

Описанный алгоритм справедлив для нерациональных кривых Безье. Для вычисления рациональных кривых в , можно спроецировать точку в ; например кривая в трехмерном пространстве должна иметь опорные точки и веса спроецированные в весовые контрольные точки . Затем обычно алгоритм переходит к интерполяции в . Результирующие четырехмерные точки могут быть спроецированы обратно в трехмерное пространство с помощью перспективного деления.

В целом, операции с рациональными кривыми (или поверхностями) эквивалентны операциям с нерациональными кривыми в проективном пространстве. Представление опорных точек как взвешенных часто бывает удобно для определения рациональных кривых.