В обчислювальній математиці алгоритм де Кастельє (або також алгоритм де Кастельжо), названий на честь його винахідника [en] — рекурсивний метод визначення форми поліномів Бернштейна або кривих Безьє. Алгоритм де Кастельє також може бути використаний для поділу кривої Безьє на дві частини за довільним значенням параметра .
Перевагою алгоритму є його вища обчислювальна стійкість у порівнянні з прямим методом.
Опис
Заданий многочлен Бернштейна B ступеня n з опорними точками
де b — базис многочлена Бернштейна, многочлен в точці t0 може бути визначений за допомогою рекурентного співвідношення:
Тоді визначення в точці може бути визначено в кроків алгоритму. Результат дано за:
Також, крива Безьє може бути розділена в точці на дві криві з відповідними опорними точками:
Приклад реалізації
Ось приклад реалізації алгоритму де Кастельє в Haskell:
deCasteljau :: Double -> [(Double, Double)] -> (Double, Double) deCasteljau t [b] = b deCasteljau t coefs = deCasteljau t reduced where reduced = zipWith (lerpP t) coefs (tail coefs) lerpP t (x0, y0) (x1, y1) = (lerp t x0 x1, lerp t y0 y1) lerp t a b = t * b + (1 - t) * a
Примітки
При виконанні розрахунків вручну корисно записати коефіцієнти у вигляді трикутної схеми:
При виборі точки t0 для розбиття поліному Бернштейна ми можемо використовувати дві діагоналі трикутної схеми, щоб побудувати поділ поліному
на
та
Приклад
Ми хочемо розбити поліном Бернштейна 2-го ступеня з коефіцієнтами Бернштейна:
у точці t0.
Почнемо рекурсію з
і друга ітерація рекурсії зупиняється у
яка очікувано є многочленом Бернштейна ступеня 2.
Крива Безьє
При оцінці кривої Безьє ступеня N в 3-вимірному просторі з N+1 опорною точкою Pi
за
- .
ми можемо розбити криву Безьє на три окремі рівняння:
які ми оцінюємо окремо, використовуючи алгоритм де Кастельє.
Геометрична інтерпретація
Геометрична інтерпретація алгоритму де Кастельє проста:
- Задана крива Безьє з опорними точками . Поєднавши послідовно опорні точки з першої по останню, отримуємо ламану лінію.
- Поділяємо кожний отриманий відрізок цієї ламаної в співвідношенні та з'єднуємо отримані точки. Внаслідок отримуємо ламану лінію з кількістю відрізків, меншим на один, ніж вихідна ламана лінія.
- Повторюємо процес до тих пір, поки не отримаємо єдину точку. Ця точка і буде точкою на заданій кривій Безьє з параметром .
Наступна ілюстрація демонструє цей процес для кубічної кривої Безьє:
Слід зауважити, що отримані в процесі побудови проміжні точки є опорними точками для двох нових кривих Безьє, що в точності збігаються з вихідною, і в сукупності дають вихідну криву Безьє. Цей алгоритм не лише визначає точку кривої для значення , але і ділить криву на дві частини в точці, що відповідає параметру , а також надає опис двох окремих кривих у формі Безьє (у параметричному вигляді).
Описаний алгоритм справедливий для нераціональних кривих Безьє. Для обчислення раціональних кривих в , можна спроектувати точку в ; наприклад крива в тривимірному просторі повинна мати опорні точки і ваги спроектовані в вагові опорні точки . Потім зазвичай алгоритм переходить до інтерполяції в . Отримані чотиривимірні точки можуть бути спроектовані назад в тривимірний простір за допомогою перспективного ділення (однорідні координати точки діляться на «вагу» ).
У цілому, операції з раціональними кривими (або поверхнями) еквівалентні операціям з нераціональними кривими в проективному просторі. Представлення опорних точок як «вагових» часто буває зручно для визначення раціональних кривих.
Посилання
- Реалізація на c++ [ 19 грудня 2014 у Wayback Machine.]
- Адаптивне розбиття кривих Безьє [ 22 жовтня 2014 у Wayback Machine.]
Див. також
Література
- Farin, Gerald & Hansford, Dianne (2000). The Essentials of CAGD. Natic, MA: A K Peters, Ltd.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
V obchislyuvalnij matematici algoritm de Kastelye abo takozh algoritm de Kastelzho nazvanij na chest jogo vinahidnika en rekursivnij metod viznachennya formi polinomiv Bernshtejna abo krivih Bezye Algoritm de Kastelye takozh mozhe buti vikoristanij dlya podilu krivoyi Bezye na dvi chastini za dovilnim znachennyam parametra t displaystyle t Perevagoyu algoritmu ye jogo visha obchislyuvalna stijkist u porivnyanni z pryamim metodom OpisZadanij mnogochlen Bernshtejna B stupenya n z opornimi tochkami b 0 b n displaystyle beta 0 ldots beta n B t i 0 n b i b i n t displaystyle B t sum i 0 n beta i b i n t de b bazis mnogochlena Bernshtejna mnogochlen v tochci t0 mozhe buti viznachenij za dopomogoyu rekurentnogo spivvidnoshennya b i 0 b i i 0 n displaystyle beta i 0 beta i mbox i 0 ldots n b i j b i j 1 1 t 0 b i 1 j 1 t 0 i 0 n j j 1 n displaystyle beta i j beta i j 1 1 t 0 beta i 1 j 1 t 0 mbox i 0 ldots n j mbox j 1 ldots n Todi viznachennya B displaystyle B v tochci t 0 displaystyle t 0 mozhe buti viznacheno v n displaystyle n krokiv algoritmu Rezultat B t 0 displaystyle B t 0 dano za B t 0 b 0 n displaystyle B t 0 beta 0 n Takozh kriva Bezye B displaystyle B mozhe buti rozdilena v tochci t 0 displaystyle t 0 na dvi krivi z vidpovidnimi opornimi tochkami b 0 0 b 0 1 b 0 n displaystyle beta 0 0 beta 0 1 ldots beta 0 n b 0 n b 1 n 1 b n 0 displaystyle beta 0 n beta 1 n 1 ldots beta n 0 Priklad realizaciyiOs priklad realizaciyi algoritmu de Kastelye v Haskell deCasteljau Double gt Double Double gt Double Double deCasteljau t b b deCasteljau t coefs deCasteljau t reduced where reduced zipWith lerpP t coefs tail coefs lerpP t x0 y0 x1 y1 lerp t x0 x1 lerp t y0 y1 lerp t a b t b 1 t aPrimitkiPri vikonanni rozrahunkiv vruchnu korisno zapisati koeficiyenti u viglyadi trikutnoyi shemi b 0 b 0 0 b 0 1 b 1 b 1 0 b 0 n b n 1 b n 1 0 b n 1 1 b n b n 0 displaystyle begin matrix beta 0 amp beta 0 0 amp amp amp amp amp beta 0 1 amp amp beta 1 amp beta 1 0 amp amp amp amp amp amp ddots amp vdots amp amp vdots amp amp beta 0 n amp amp amp amp beta n 1 amp beta n 1 0 amp amp amp amp amp beta n 1 1 amp amp beta n amp beta n 0 amp amp amp end matrix Pri vibori tochki t0 dlya rozbittya polinomu Bernshtejna mi mozhemo vikoristovuvati dvi diagonali trikutnoyi shemi shob pobuduvati podil polinomu B t i 0 n b i 0 b i n t t 0 1 displaystyle B t sum i 0 n beta i 0 b i n t mbox qquad t in 0 1 na B 1 t i 0 n b 0 i b i n t t 0 t 0 t 0 displaystyle B 1 t sum i 0 n beta 0 i b i n left frac t t 0 right mbox qquad t in 0 t 0 ta B 2 t i 0 n b i n i b i n t t 0 1 t 0 t t 0 1 displaystyle B 2 t sum i 0 n beta i n i b i n left frac t t 0 1 t 0 right mbox qquad t in t 0 1 PrikladMi hochemo rozbiti polinom Bernshtejna 2 go stupenya z koeficiyentami Bernshtejna b 0 0 b 0 displaystyle beta 0 0 beta 0 b 1 0 b 1 displaystyle beta 1 0 beta 1 b 2 0 b 2 displaystyle beta 2 0 beta 2 u tochci t0 Pochnemo rekursiyu z b 0 1 b 0 0 1 t 0 b 1 0 t 0 b 0 1 t 0 b 1 t 0 displaystyle beta 0 1 beta 0 0 1 t 0 beta 1 0 t 0 beta 0 1 t 0 beta 1 t 0 b 1 1 b 1 0 1 t 0 b 2 0 t 0 b 1 1 t 0 b 2 t 0 displaystyle beta 1 1 beta 1 0 1 t 0 beta 2 0 t 0 beta 1 1 t 0 beta 2 t 0 i druga iteraciya rekursiyi zupinyayetsya u b 0 2 b 0 1 1 t 0 b 1 1 t 0 b 0 1 t 0 1 t 0 b 1 t 0 1 t 0 b 1 1 t 0 t 0 b 2 t 0 t 0 b 0 1 t 0 2 b 1 2 t 0 1 t 0 b 2 t 0 2 displaystyle begin aligned beta 0 2 amp beta 0 1 1 t 0 beta 1 1 t 0 amp beta 0 1 t 0 1 t 0 beta 1 t 0 1 t 0 beta 1 1 t 0 t 0 beta 2 t 0 t 0 amp beta 0 1 t 0 2 beta 1 2t 0 1 t 0 beta 2 t 0 2 end aligned yaka ochikuvano ye mnogochlenom Bernshtejna stupenya 2 Kriva BezyePri ocinci krivoyi Bezye stupenya N v 3 vimirnomu prostori z N 1 opornoyu tochkoyu Pi B t i 0 n P i b i n t t 0 1 displaystyle mathbf B t sum i 0 n mathbf P i b i n t mbox t in 0 1 za P i x i y i z i displaystyle mathbf P i begin pmatrix x i y i z i end pmatrix mi mozhemo rozbiti krivu Bezye na tri okremi rivnyannya B 1 t i 0 n x i b i n t t 0 1 displaystyle B 1 t sum i 0 n x i b i n t mbox t in 0 1 B 2 t i 0 n y i b i n t t 0 1 displaystyle B 2 t sum i 0 n y i b i n t mbox t in 0 1 B 3 t i 0 n z i b i n t t 0 1 displaystyle B 3 t sum i 0 n z i b i n t mbox t in 0 1 yaki mi ocinyuyemo okremo vikoristovuyuchi algoritm de Kastelye Geometrichna interpretaciyaGeometrichna interpretaciya algoritmu de Kastelye prosta Zadana kriva Bezye z opornimi tochkami P 0 P n displaystyle scriptstyle P 0 P n Poyednavshi poslidovno oporni tochki z pershoyi po ostannyu otrimuyemo lamanu liniyu Podilyayemo kozhnij otrimanij vidrizok ciyeyi lamanoyi v spivvidnoshenni t 1 t displaystyle t 1 t ta z yednuyemo otrimani tochki Vnaslidok otrimuyemo lamanu liniyu z kilkistyu vidrizkiv menshim na odin nizh vihidna lamana liniya Povtoryuyemo proces do tih pir poki ne otrimayemo yedinu tochku Cya tochka i bude tochkoyu na zadanij krivij Bezye z parametrom t displaystyle t Nastupna ilyustraciya demonstruye cej proces dlya kubichnoyi krivoyi Bezye Slid zauvazhiti sho otrimani v procesi pobudovi promizhni tochki ye opornimi tochkami dlya dvoh novih krivih Bezye sho v tochnosti zbigayutsya z vihidnoyu i v sukupnosti dayut vihidnu krivu Bezye Cej algoritm ne lishe viznachaye tochku krivoyi dlya znachennya t displaystyle t ale i dilit krivu na dvi chastini v tochci sho vidpovidaye parametru t displaystyle t a takozh nadaye opis dvoh okremih krivih u formi Bezye u parametrichnomu viglyadi Opisanij algoritm spravedlivij dlya neracionalnih krivih Bezye Dlya obchislennya racionalnih krivih v R n displaystyle mathbf R n mozhna sproektuvati tochku v R n 1 displaystyle mathbf R n 1 napriklad kriva v trivimirnomu prostori povinna mati oporni tochki x i y i z i displaystyle x i y i z i i vagi w i displaystyle w i sproektovani v vagovi oporni tochki w i x i w i y i w i z i w i displaystyle w i x i w i y i w i z i w i Potim zazvichaj algoritm perehodit do interpolyaciyi v R 4 displaystyle mathbf R 4 Otrimani chotirivimirni tochki mozhut buti sproektovani nazad v trivimirnij prostir za dopomogoyu perspektivnogo dilennya odnoridni koordinati tochki dilyatsya na vagu w i displaystyle w i U cilomu operaciyi z racionalnimi krivimi abo poverhnyami ekvivalentni operaciyam z neracionalnimi krivimi v proektivnomu prostori Predstavlennya opornih tochok yak vagovih chasto buvaye zruchno dlya viznachennya racionalnih krivih PosilannyaRealizaciya na c 19 grudnya 2014 u Wayback Machine Adaptivne rozbittya krivih Bezye 22 zhovtnya 2014 u Wayback Machine Div takozhKriva Bezye Polinomi Bernshtejna P yer BezyeLiteraturaFarin Gerald amp Hansford Dianne 2000 The Essentials of CAGD Natic MA A K Peters Ltd ISBN 1 56881 123 3