डी कैस्टेलजौ का एल्गोरिदम

संख्यात्मक विश्लेषण के गणित क्षेत्र में, डी कास्टेलजौ का एल्गोरिदम बर्नस्टीन फॉर्म या बेज़ियर वक्रों में बहुपदों का मूल्यांकन करने के लिए एक पुनरावर्ती विधि है, जिसका नाम इसके आविष्कारक पॉल डी कास्टेलजौ के नाम पर रखा गया है। डी कास्टेलजौ के एल्गोरिदम का उपयोग एक बेज़ियर वक्र को एक मनमाना पैरामीटर मान पर दो बेज़ियर वक्रों में विभाजित करने के लिए भी किया जा सकता है।

यद्यपि प्रत्यक्ष दृष्टिकोण की तुलना में अधिकांश आर्किटेक्चर के लिए एल्गोरिदम धीमा है, यह संख्यात्मक रूप से अधिक स्थिर है।

परिभाषा
एक बेज़ियर वक्र $$B$$ (डिग्री का $$n$$, नियंत्रण बिंदुओं के साथ $$\beta_0, \ldots, \beta_n$$) को बर्नस्टीन रूप में इस प्रकार लिखा जा सकता है


 * $$B(t) = \sum_{i=0}^{n}\beta_{i}b_{i,n}(t),$$

कहाँ $$b$$ एक बर्नस्टीन बहुपद है


 * $$b_{i,n}(t) = {n \choose i}(1-t)^{n-i}t^i.$$

बिंदु पर वक्र $$t_0$$ पुनरावृत्ति संबंध के साथ मूल्यांकन किया जा सकता है


 * $$\beta_i^{(0)} := \beta_i,\ \ i=0,\ldots,n$$
 * $$\beta_i^{(j)} := \beta_i^{(j-1)} (1-t_0) + \beta_{i+1}^{(j-1)} t_0,\ \ i = 0,\ldots,n-j,\ \ j= 1,\ldots,n$$

फिर, का मूल्यांकन $$B$$ बिंदु पर $$t_0$$ में मूल्यांकन किया जा सकता है $$\binom{n}{2}$$ परिचालन. परिणाम $$B(t_0)$$ द्वारा दिया गया है


 * $$B(t_0) = \beta_0^{(n)}.$$

इसके अलावा, बेज़ियर वक्र $$B$$ बिंदु पर विभाजित किया जा सकता है $$t_0$$ संबंधित नियंत्रण बिंदुओं के साथ दो वक्रों में:
 * $$\beta_0^{(0)},\beta_0^{(1)},\ldots,\beta_0^{(n)}$$
 * $$\beta_0^{(n)},\beta_1^{(n-1)},\ldots,\beta_n^{(0)}$$

ज्यामितीय व्याख्या
डी कास्टेलजौ के एल्गोरिदम की ज्यामितीय व्याख्या सीधी है। निम्नलिखित चित्र घन बेज़ियर वक्र के लिए इस प्रक्रिया को दर्शाता है:
 * नियंत्रण बिंदुओं वाले बेज़ियर वक्र पर विचार करें $$P_0,...,P_n$$. लगातार बिंदुओं को जोड़कर हम वक्र का नियंत्रण बहुभुज बनाते हैं।
 * अब इस बहुभुज के प्रत्येक रेखाखंड को अनुपात के साथ उप-विभाजित करें $$t : (1-t)$$ और जो अंक मिले उन्हें जोड़ दें। इस तरह आप एक कम खंड वाले नए बहुभुज पर पहुंचते हैं।
 * प्रक्रिया को तब तक दोहराएँ जब तक आप एकल बिंदु पर न पहुँच जाएँ - यह पैरामीटर के अनुरूप वक्र का बिंदु है $$t$$.


 * [[Image:DeCasteljau1.svg]]ध्यान दें कि जिन मध्यवर्ती बिंदुओं का निर्माण किया गया था वे वास्तव में दो नए बेज़ियर वक्रों के लिए नियंत्रण बिंदु हैं, दोनों बिल्कुल पुराने के साथ मेल खाते हैं। यह एल्गोरिदम न केवल वक्र का मूल्यांकन करता है $$t$$, लेकिन वक्र को दो टुकड़ों में विभाजित करता है $$t$$, और बेज़ियर रूप में दो उप-वक्रों के समीकरण प्रदान करता है।

ऊपर दी गई व्याख्या एक गैर-तर्कसंगत बेज़ियर वक्र के लिए मान्य है। एक तर्कसंगत बेज़ियर वक्र का मूल्यांकन करने के लिए $$\mathbf{R}^n$$, हम इस बिंदु को प्रक्षेपित कर सकते हैं $$\mathbf{R}^{n+1}$$; उदाहरण के लिए, तीन आयामों में एक वक्र के अपने नियंत्रण बिंदु हो सकते हैं $$\{(x_i, y_i, z_i)\}$$ और वजन $$\{w_i\}$$ भारित नियंत्रण बिंदुओं पर प्रक्षेपित किया गया $$\{(w_ix_i, w_iy_i, w_iz_i, w_i)\}$$. फिर एल्गोरिदम सामान्य रूप से आगे बढ़ता है, इंटरपोलेशन करता है $$\mathbf{R}^4$$. परिणामी चार-आयामी बिंदुओं को एक परिप्रेक्ष्य विभाजन के साथ तीन-स्थान में वापस प्रक्षेपित किया जा सकता है।

सामान्य तौर पर, एक तर्कसंगत वक्र (या सतह) पर संचालन एक प्रक्षेप्य स्थान में एक गैर-तर्कसंगत वक्र पर संचालन के बराबर होता है। तर्कसंगत वक्रों का मूल्यांकन करते समय भारित नियंत्रण बिंदुओं और वज़न के रूप में यह प्रतिनिधित्व अक्सर सुविधाजनक होता है।

संकेतन
हाथ से गणना करते समय गुणांकों को त्रिभुज योजना में लिखना उपयोगी होता है



\begin{matrix} \beta_0    & = \beta_0^{(0)}     &                   &         &               \\ &                    & \beta_0^{(1)}     &         &               \\ \beta_1    & = \beta_1^{(0)}     &                   &         &               \\ &                    &                   & \ddots  &               \\ \vdots     &                     & \vdots            &         & \beta_0^{(n)} \\ &                    &                   &         &               \\ \beta_{n-1} & = \beta_{n-1}^{(0)} &                   &         &               \\ &                    & \beta_{n-1}^{(1)} &         &               \\ \beta_n    & = \beta_n^{(0)}     &                   &         &               \\ \end{matrix} $$ एक बिंदु चुनते समय टी0 बर्नस्टीन बहुपद का मूल्यांकन करने के लिए हम बहुपद का विभाजन बनाने के लिए त्रिभुज योजना के दो विकर्णों का उपयोग कर सकते हैं
 * $$B(t) = \sum_{i=0}^n \beta_i^{(0)} b_{i,n}(t), \quad t \in [0,1]$$

में
 * $$B_1(t) = \sum_{i=0}^n \beta_0^{(i)} b_{i,n}\left(\frac{t}{t_0}\right)\!, \quad t \in [0,t_0]$$

और
 * $$B_2(t) = \sum_{i=0}^n \beta_i^{(n-i)} b_{i,n}\left(\frac{t-t_0}{1-t_0}\right)\!, \quad t \in [t_0,1].$$

बेज़ियर वक्र
n + 1 नियंत्रण बिंदु 'पी' के साथ 3-आयामी अंतरिक्ष में डिग्री एन के बेज़ियर वक्र का मूल्यांकन करते समयi
 * $$\mathbf{B}(t) = \sum_{i=0}^{n} \mathbf{P}_i b_{i,n}(t),\ t \in [0,1]$$

साथ


 * $$\mathbf{P}_i :=

\begin{pmatrix} x_i \\ y_i \\ z_i \end{pmatrix},$$ हमने बेज़ियर वक्र को तीन अलग-अलग समीकरणों में विभाजित किया है


 * $$B_1(t) = \sum_{i=0}^{n} x_i b_{i,n}(t),\ t \in [0,1]$$
 * $$B_2(t) = \sum_{i=0}^{n} y_i b_{i,n}(t),\ t \in [0,1]$$
 * $$B_3(t) = \sum_{i=0}^{n} z_i b_{i,n}(t),\ t \in [0,1]$$

जिसका मूल्यांकन हम डी कैस्टेलजाउ के एल्गोरिदम का उपयोग करके व्यक्तिगत रूप से करते हैं।

उदाहरण
हम बर्नस्टीन गुणांक के साथ डिग्री 2 के बर्नस्टीन बहुपद का मूल्यांकन करना चाहते हैं
 * $$\beta_0^{(0)} = \beta_0$$
 * $$\beta_1^{(0)} = \beta_1$$
 * $$\beta_2^{(0)} = \beta_2$$

बिंदु पर टी0.

हम पुनरावृत्ति प्रारंभ करते हैं
 * $$\beta_0^{(1)} = \beta_0^{(0)} (1-t_0) + \beta_1^{(0)}t_0 = \beta_0(1-t_0) + \beta_1 t_0$$
 * $$\beta_1^{(1)} = \beta_1^{(0)} (1-t_0) + \beta_2^{(0)}t_0 = \beta_1(1-t_0) + \beta_2 t_0$$

और दूसरे पुनरावृत्ति के साथ पुनरावर्तन रुक जाता है

\begin{align} \beta_0^{(2)} & = \beta_0^{(1)} (1-t_0) + \beta_1^{(1)} t_0     \\ \            & = \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 \\ \            & = \beta_0 (1-t_0)^2 + \beta_1 2t_0(1-t_0) + \beta_2 t_0^2 \end{align} $$ जो घात 2 का अपेक्षित बर्नस्टीन बहुपद है।

कार्यान्वयन
यहां विभिन्न प्रोग्रामिंग भाषाओं में डी कैस्टेलजाउ के एल्गोरिदम के उदाहरण कार्यान्वयन दिए गए हैं।

जावास्क्रिप्ट
निम्नलिखित फ़ंक्शन डी कास्टेलजौ के एल्गोरिदम को एक सरणी पर लागू करता है points, अतिरिक्त गुणों के साथ अंतिम मध्यबिंदु को हल करना in और out (क्रमशः मध्यबिंदु के अंदर और बाहर स्पर्शरेखाओं के लिए)।

निम्नलिखित उदाहरण इस फ़ंक्शन को कॉल करता हैgreen नीचे बिंदु, वक्र के बिल्कुल आधे रास्ते पर। परिणामी निर्देशांक बराबर होने चाहिए $$(192, 32)$$, या सबसे केंद्र की स्थितिred बिंदु।



यह भी देखें

 * बेज़ियर वक्र
 * डी बूर का एल्गोरिदम
 * एकपदी रूप में बहुपदों का मूल्यांकन करने के लिए हॉर्नर योजना
 * चेबीशेव रूप में बहुपदों का मूल्यांकन करने के लिए क्लेंशॉ एल्गोरिथम

संदर्भ

 * Farin, Gerald & Hansford, Dianne (2000). The Essentials of CAGD. Natic, MA: A K Peters, Ltd.  ISBN 1-56881-123-3

बाहरी संबंध

 * Piecewise linear approximation of Bézier curves – description of De Casteljau's algorithm, including a criterion to determine when to stop the recursion
 * Bezier Curves and Picasso — Description and illustration of De Casteljau's algorithm applied to cubic Bézier curves.
 * de Casteljau's algorithm - Implementation help and interactive demonstration of the algorithm.