De Wikipedia, la enciclopedia libre
El algoritmo de De Casteljau es, en el campo del análisis numérico de la matemática , un método recursivo para calcular polinomios en la forma de Bernstein o base de Bernstein , o en las curvas de Bézier . Toma su nombre del ingeniero Paul De Casteljau . Este algoritmo es un método numéricamente estable para evaluar las curvas de Bézier.
Aunque el algoritmo de De Casteljau es relativamente lento en las configuraciones, si se compara con otros es numéricamente más estable .
La idea principal de este algoritmo surge de requisitos gráficos en informática y se basa en el hecho que una restricción de una curva de Bézier es también una curva de Bézier. Entonces, a partir de la curva inicial se encuentran los puntos de control de dos curvas definidas por
t
∈
[
0
,
1
/
2
]
{\displaystyle t\in [0,1/2]}
y
t
∈
[
1
/
2
,
1
]
{\displaystyle t\in [1/2,1]}
y se fijan los pixeles que corresponden al punto por
t
=
1
2
{\displaystyle t={\frac {1}{2}}}
. Donde se iteran los procesos sobre cada una de las dos curvas hasta que la precisión sea inferior al pixel.
Dado un polinomio B en forma de Bernstein de grado n
B
(
t
)
=
∑
i
=
0
n
β
i
b
i
,
n
(
t
)
,
{\displaystyle B(t)=\sum _{i=0}^{n}\beta _{i}b_{i,n}(t),}
donde b es un polinomio base de Bernstein , el polinomio en el punto t 0 puede ser calculado con la relación de recurrencia
β
i
(
0
)
=
β
i
,
i
=
0
,
…
,
n
{\displaystyle \beta _{i}^{(0)}=\beta _{i}{\mbox{ , }}i=0,\ldots ,n}
β
i
(
j
)
=
β
i
(
j
−
1
)
(
1
−
t
0
)
β
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}
con
B
(
t
0
)
=
β
0
(
n
)
{\displaystyle B(t_{0})=\beta _{0}^{(n)}}
.
En el cálculo manual es útil escribir los coeficientes en un esquema triangular del tipo:
β
0
=
β
0
(
0
)
β
0
(
1
)
β
1
=
β
1
(
0
)
⋱
⋮
⋮
β
0
(
n
)
β
n
−
1
=
β
n
−
1
(
0
)
β
n
−
1
(
1
)
β
n
=
β
n
(
0
)
{\displaystyle {\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}}}
En la elección de un punto t 0 por el cual calcular el polinomio de Bernstein se pueden usar las diagonales del esquema triangular para construir una división del polinomio.
B
(
t
)
=
∑
i
=
0
n
β
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]}
hasta
B
1
(
t
)
=
∑
i
=
0
n
β
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}]}
y
B
2
(
t
)
=
∑
i
=
0
n
β
n
−
i
(
i
)
b
i
,
n
(
t
−
t
0
1
−
t
0
)
,
t
∈
[
t
0
,
1
]
{\displaystyle B_{2}(t)=\sum _{i=0}^{n}\beta _{n-i}^{(i)}b_{i,n}\left({\frac {t-t_{0}}{1-t_{0}}}\right){\mbox{ , }}\qquad t\in [t_{0},1]}
Si se desea calcular el valor del polinomio de Bernstein de grado 2 con los coeficientes:
β
0
(
0
)
=
β
0
{\displaystyle \beta _{0}^{(0)}=\beta _{0}}
β
1
(
0
)
=
β
1
{\displaystyle \beta _{1}^{(0)}=\beta _{1}}
β
2
(
0
)
=
β
2
{\displaystyle \beta _{2}^{(0)}=\beta _{2}}
en el punto t 0 .
Se efectúa la recursión con:
β
0
(
1
)
=
β
0
(
0
)
(
1
−
t
0
)
β
1
(
0
)
t
0
=
β
0
(
1
−
t
0
)
β
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}}
β
1
(
1
)
=
β
1
(
0
)
(
1
−
t
0
)
β
2
(
0
)
t
0
=
β
1
(
1
−
t
0
)
β
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}}
y a la segunda iteración la recursión concluye en:
β
0
(
2
)
=
β
0
(
1
)
(
1
−
t
0
)
β
1
(
1
)
t
0
=
β
0
(
1
−
t
0
)
(
1
−
t
0
)
β
1
t
0
(
1
−
t
0
)
β
1
(
1
−
t
0
)
t
0
β
2
t
0
t
0
=
β
0
(
1
−
t
0
)
2
β
1
2
t
0
(
1
−
t
0
)
β
2
t
0
2
{\displaystyle {\begin{matrix}\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{matrix}}}
que es el polinomio de Bernstein buscado de grado 2 .
Farin, Gerald & Hansford, Dianne (2000). The Essentials of CAGD . Natic, MA: A K Peters, Ltd. ISBN 1-56881-123-3