bezier

19

Click here to load reader

Upload: hellang

Post on 21-Jun-2015

1.280 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: bezier

Un estudio sobre las curvas

interpolantes de Bézier

y un programa en MATLAB Dr. Fernando A. Velasco Avalos

Ing. Efraín González Macías

Resumen:

En este artículo se presenta un completo estudio de las curvas de Bézier, de la forma en que se construyen geométrica y analíticamente, de la construcción de grado arbitrario, del polinomio paramétrico así como su interpretación matricial. Se resumen las características de las mismas. Se detallan las condiciones para unir dos o mas curvas de Bézier, logrando transiciones suaves. Se presenta la solución de estas curvas con una herramienta de programación, elaborada con una interfase gráfica amigable y ejemplos para diferentes tipos y grados de curvas.

1. Introducción. La importancia de la transición suave de un punto a otro, es sin duda un

importante problema en el campo de la ingeniería, así podemos encontrar que dependiendo del tipo de problema, existen soluciones diferentes; por ejemplo para un conjunto de puntos ],[ yxP puede ser de relevante importancia el que se haga pasar una curva por todos ellos utilizando en este caso un método de interpolación, uno de los más conocidos es la interpolación polinomial de Lagrange [2][3]. Otro problema es encontrar la curva sin que forzosamente se pase por todos los puntos, sino que ésta describa el comportamiento general de los datos, tal es el caso del ajuste de curvas y un método muy conocido es el de Mínimos Cuadrados [2][3][4]. Pero cuando el problema es trazar una curva suave desde un punto inicial hasta un punto final, y que ésta sea afectada en su trayectoria por un conjunto de puntos que describen un polígono de apoyo, entonces el problema puede resolverse con las Curvas de Bézier [1].

Pierre Bézier, francés, ingeniero de profesión, en 1960 resolvió el problema numérico en el trazado de curvas y superficies interpolantes, que parten y llegan a un punto dado, y su trayectoria es afectada por un conjunto de puntos de apoyo. Su utilización desde entonces en la fabricación de vehículos y en la aeronáutica, áreas en la que él ha incursionado exitosamente, son sin duda algunas de las mas valiosas aplicaciones que se hacen de esta herramienta [6][7][8].

Page 2: bezier

Curvas de Bézier

2 velasco y gonzález

Entonces al definir las curvas de Bézier, decimos que éstas se apoyan en un conjunto de puntos ordenados llamados puntos de control; los cuales afectan la trayectoria de la curva. La curva pasa obligatoriamente solo por el primer y el último punto y no por los demás. Al polígono que se forma al unir secuencialmente los puntos de control se le llama polígono de apoyo o de control. La curva de Bézier que se obtiene como resultado, está en la cubierta convexa del polígono de apoyo.

2. Construcción geométrica de la curva de Bézier Para iniciar nuestra introducción a la construcción de las curvas de Bézier,

propondremos un caso de estudio en donde la curva que se desea obtener es una cúbica. Para lo anterior es necesario considerar cuatro puntos 3210 ,,, PPPP que forman el polígono de apoyo. La curva iniciará en el punto 0P y finalizará en el punto 3P ; su trayectoria para ir del punto de inicio al punto final depende de la posición de los puntos 1P y 2P . Como es de notar, en todos los casos el grado n de la curva es menor en uno que el número de puntos del polígono de apoyo.

La notación de los puntos del polígono de apoyo, que depende directamente del grado de la curva, será:

nii PP ,= (1)

donde i es la identificación del punto en cuestión y n es el nivel de apoyo del polígono y al inicio coincide con el número de puntos de apoyo menos uno. Así para nuestro caso de estudio 3,2,1,0=i con 3=n , y los puntos del polígono de apoyo quedan identificados de la siguiente manera 3,00 PP = ; 3,11 PP = ; 3,22 PP = ;

3,33 PP = ; como puede observarse en la figura 2.1.

Figura 2-1 : Nomenclatura de los vértices del polígono de apoyo.

Page 3: bezier

Curvas de Bézier

3 velasco y gonzález

Sea t un parámetro valuado a lo largo de la curva, cuyos valores posibles

son: 10 ≤≤ t , es decir, los puntos sobre la curva se definirán de acuerdo con el parámetro t , en la curva )(tC , y se cumple que en los puntos extremos de la curva

3,0)0( PC = y 3,3)1( PC = . Para construir un punto )( 0tC de la curva de Bézier se deberá de seguir el

siguiente procedimiento: Se toma un punto 2,0P que se encuentra entre 3,0P y 3,1P , de tal forma que este se localice a la ésimat −0 parte de la distancia de 3,13,0 PP medida desde 3,0P ; siguiendo la misma regla se construyen los puntos 2,1P y 2,2P para los segmentos 3,23,1 PP y 3,33,2 PP . Los puntos anteriores se unen para dar cabida al siguiente nivel del polígono de apoyo, el cual queda definido en sus vértices como: 2,iP para 2,1,0=i .

Con el procedimiento anterior se definen sobre el polígono de nivel 2 los puntos 1,0P y 1,1P , localizados también a la ésimat −0 parte de los segmentos respectivos. El procedimiento se repite hasta el nivel mas bajo posible, en donde el polígono de apoyo se ha convertido en un punto 0,0P y este es el punto de la curva para el 0t dado.

0,00 )( PtC = (2)

En la figura 2.2 se presenta la localización geométrica de un punto de la

curva para cuando 310 =t .

Figura 2-2: Construcción del punto C(1/3)

Page 4: bezier

Curvas de Bézier

4 velasco y gonzález

El procedimiento anterior permite encontrar cualquier punto de la curva )(tC

para el valor paramétrico 10 ≤≤ t , sin importar el número de puntos que formen el polígono de apoyo. Cabe hacer notar que esta construcción cumple la condición de extremos:

0,0)0( PC = y 3,3)1( PC = (3)

3. Construcción analítica de la curva de Bézier Para determinar las ecuaciones que nos permitan construir el polinomio

paramétrico que describe la curva de Bézier, seguiremos los pasos de la construcción geométrica.

Consideremos para ejemplificar el método aplicado a un polígono de apoyo formado por el siguiente conjunto de puntos )2,5(3,0P , )11,12(3,1P , )9,23(3,2P y

)2,25(3,3P . Se desea construir la curva de Bézier de tercer grado en la cubierta convexa del polígono que forman los puntos anteriores, es decir tenemos que

3=n . La construcción de los puntos 2,0P , 2,1P , 2,2P está dada por:

3,13,2, )1( ++−= iii tPPtP (4) para 2,1,0=i

Para nuestro ejemplo 31=t , tenemos:

0=i ; )66667.5,33335.7()66667.3,4()2,33335.3(31)3

11( 3,13,02,0 =+=+−= PPP

1=i ; )33333.10,66667.15(2,1 =P 2=i ; )66667.6,66667.23(2,2 =P

La construcción de los puntos 1,0P , 1,1P está dada por:

2,12,1, )1( ++−= iii tPPtP (5) para 1,0=i

Para nuestro ejemplo tenemos en este nivel del polígono:

0=i ; )22221.7,1110.10(1,0 =P 1=i ; )11102.9,33335.18(1,1 =P

Page 5: bezier

Curvas de Bézier

5 velasco y gonzález

La construcción de los puntos 1,0P , 1,1P está dada por:

1,11,0, )1( ++−= iii tPPtP (6) para 0=i

Para nuestro ejemplo tenemos como punto de la curva de Bézier :

0=i ; )8518.7,85177.12(0,0 =P

Sustituyendo (4) en (5) y el resultado en (6), entonces se tiene que: 3,3

33,2

23,1

23,0

30,0 )1(3)1(3)1( PtPtttPtPtP +−+−+−= (7)

Sustituyendo las expresiones (1) y (2) en el resultado anterior: 3

32

21

20

3 )1(3)1(3)1()( PtPtttPtPttC +−+−+−= (8) El polinomio de la ecuación (8) tiene como coeficientes los mismos del

teorema del binomio nba )( + para 3=n , y puede escribirse de la siguiente forma:

33

22

12

03

33

)1(23

)1(13

)1(03

)( PtPtttPtPttC ⎟⎟⎠

⎞⎜⎜⎝

⎛+−⎟⎟

⎞⎜⎜⎝

⎛+−⎟⎟

⎞⎜⎜⎝

⎛+−⎟⎟

⎞⎜⎜⎝

⎛=

que se resume en la siguiente forma cerrada para el caso de curva de

tercer grado:

∑=

−−⎟⎟⎠

⎞⎜⎜⎝

⎛=

3

0

3)1(3

)(i

iii Ptt

itC (9)

La expresión anterior se puede representar en forma matricial, de hecho

para la determinación de los puntos en la ecuación paramétrica (9) cuando 3=n , usaremos la siguiente formulación y la generalizaremos.

Page 6: bezier

Curvas de Bézier

6 velasco y gonzález

[ ]

⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢

−−−

=

3

2

2

3

3210 )1(3)1(3)1(

)(

ttttt

t

PPPPtC

⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢

⎥⎥⎥⎥

⎢⎢⎢⎢

−−

−−

⎥⎥⎥⎥

⎢⎢⎢⎢

=

10001003303631331

)(2

3

3

2

1

0

ttt

PPPP

tC

T

[ ]

⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢

=

1

)(2

3

33210 ttt

BPPPPtC (10)

Donde 3B es la matriz cúbica de Bézier.

4. Curvas de Bézier de grado arbitrario. La curva de Bézier está definida por )1( +n puntos nPP ,...,0 ; del

desarrollo anterior en que se explicó la construcción geométrica y matemática de las curvas interpolantes de Bézier, se encuentra la forma cerrada que define la ecuación paramétrica de Bézier para el caso general, de la siguiente forma:

∑=

−−⎟⎟⎠

⎞⎜⎜⎝

⎛=

n

ii

iin Pttin

tC0

)1()( (11)

De la formulación matricial se puede ver de la expresión (10), que el

problema para el trazado de estas curvas es la determinación de la matriz de Bézier nB , para el valor apropiado de n .

La matriz de Bézier de grado n , se construye al desarrollar la sumatoria i

n

i

in ttin

∑=

−−⎟⎟⎠

⎞⎜⎜⎝

0)1( de la expresión (11), y escribirla en forma matricial como el

producto de una matriz de coeficientes que multiplica por la izquierda al vector

Page 7: bezier

Curvas de Bézier

7 velasco y gonzález

de los términos de t , cuyas potencias se han ordenado en forma descendente de n a cero .

El contar con la matriz de Bézier de grado n , permite realizar la determinación de cualquier punto de la curva al sustituir en el vector anterior el correspondiente valor del parámetro t .

Para construir la curva bastará sustituir los valores de 0t , tales que 10 0 ≤≤ t . Para fines prácticos se recomienda dividir el intervalo de validez del

parámetro t , en un apropiado número de segmentos s , determinar un paso de evaluación como sp 1= , y evaluar la curva para ipt += 00 para si L,2,1,0= ; y

cada punto así obtenido se une mediante un segmento de recta al punto anterior.

El efecto visual de curvatura suave, será mucho mejor en cada caso si el valor de s es grande.

5. Condiciones de frontera. Analizaremos ahora las condiciones de frontera de las curvas de Bézier,

iniciaremos obteniendo la derivada de (11) con respecto a t .

∑=

−−−− −−−−⎟⎟⎠

⎞⎜⎜⎝

⎛=

n

ii

iiniin Pttinttiin

tC0

11 ))1)(()1(()(' (12)

Evaluando las ecuaciones (11) y (12) en los extremos ( 0=t , 1=t ), se

obtienen las siguientes condiciones de frontera: Desarrollando la ecuación (11), se tiene:

nn

nnnn Pt

nn

Pttn

ntPt

nPt

ntC ⎟⎟

⎞⎜⎜⎝

⎛+−⎟⎟

⎞⎜⎜⎝

⎛−

++−⎟⎟⎠

⎞⎜⎜⎝

⎛+−⎟⎟

⎞⎜⎜⎝

⎛= −

−−1

111

10 )1(

1)1(

1)1(

0)( L

De la inspección de los términos podemos darnos cuenta que al sustituir

0=t se obtiene el punto inicial 0P del primer término y todos los demás términos se hacen cero. En el caso de 1=t se obtiene solo el punto final nP , ya que solo el último término prevalece y los demás se hacen cero.

0)0( PC =

Page 8: bezier

Curvas de Bézier

8 velasco y gonzález

nPC =)1( De igual forma desarrollaremos la ecuación (12), para analizar las

condiciones de frontera.

+−−−−⎟⎟⎠

⎞⎜⎜⎝

⎛+−⎟⎟

⎞⎜⎜⎝

⎛= −−

121

0 ])1)(1()1[(1

][0

)(' Pttntn

Pnn

tC nn

nn

nnnnn Pnt

nn

Ptttnn

nPttntt

n][])1)(1[(

1])1)(2()1(2[

21

112

2232 −

−−−−−

⎟⎟⎠

⎞⎜⎜⎝

⎛+−−−⎟⎟

⎞⎜⎜⎝

⎛−

++−−−−⎟⎟⎠

⎞⎜⎜⎝

⎛L

Al sustituir las condiciones de frontera, encontramos que el valor de la pendiente de la curva de Bézier, en los extremos es:

)()0(' 01 PPnC −= )()1(' 1−−= nn PPnC

Los resultados anteriores nos muestran que la curva pasa por los dos

puntos extremos del polígono de apoyo 0P y nP ; además de que en estos puntos la curva es tangente al primer y al último segmento del polígono de apoyo.

En la formulación matricial de la curva )(tC se tiene, como se mostró en la expresión (10), la transpuesta del vector de coordenadas del polígono de apoyo TP , la matriz ésiman − de Bézier nB y el vector de los términos de t , cuyas potencias van desde n a cero , que se designará como T . Entonces la curva paramétrica se escribe de la siguiente manera:

TBPtC nT=)( (13)

Así la curva de Bézier )(tC está en la cubierta convexa de sus puntos de

control. Esta es una propiedad importante, y la principal razón por la que estas curvas son muy empleadas; pues esta es una condición que otros métodos no pueden asegurar, generando en ocasiones puntos que no pertenecen y que incluso llegan a estar muy lejos de la cubierta convexa.

Page 9: bezier

Curvas de Bézier

9 velasco y gonzález

6. Propiedades. A continuación se presentan las propiedades de las curvas de Bézier.

La curva en general no pasa por ninguno de los puntos de control, excepto por el primero y el último.

La curva siempre está en la cubierta convexa de los puntos de control.

Si solo existe un punto de control 0P , entonces 0=n y 0)( PtC = para toda t .

Si solo existen dos puntos de control 0P y 1P , entonces 1=n y la curva de Bézier es la línea recta que une estos dos puntos.

El término ∑=

−−⎟⎟⎠

⎞⎜⎜⎝

⎛n

i

iin ttin

0)1( , es llamado la función de curvatura.

La función de curvatura es siempre un polinomio de grado menor en uno que

el número de puntos de control.

Se pueden generar curvas cerradas haciendo el último punto de control igual al primero de ellos.

Cuando el número de puntos de control se incrementa se presentan necesariamente polinomios de alto grado,

excepto por el caso redundante de dos puntos de control, en general no es posible generar curvas de Bézier paralelas.

7. Unión de dos curvas. Un problema importante en el uso de curvas de Bézier es el manejo de

polígonos de un alto número de puntos, ya que generan necesariamente polinomios de alto grado. El manejo de estos polinomios es complicado y se recomienda en estos casos dividir el problema y unir dos o mas curvas.

Para que la unión de estas curvas sean de forma suave se recomienda utilizar puntos intermedios de paso obligado, los cuales pueden ser los puntos iniciales y finales de las curvas a unir.

Para garantizar la transición suave de una curva a otra es necesario que la pendiente de ambas curvas en el punto de unión sea la misma, es decir la pendiente del punto final para la curva de atrás, es igual a la pendiente del punto de inicio para la curva de adelante.

Page 10: bezier

Curvas de Bézier

10 velasco y gonzález

Lo anterior puede garantizarse si en la construcción tenemos cuidado de que la pendiente del último tramo del polígono de apoyo de la curva de atrás es igual a la pendiente del primer tramo del polígono de apoyo de la curva de adelante; y el punto final de la curva de atrás sea el mismo que el primer punto de la curva de adelante (mismas coordenadas). Como se muestra en la figura 7-1.

Figura 7-1: a) Dos curvas con sus polígonos de apoyo. b) Unión de las curvas

8. Implementación. A continuación se presenta la implementación de las Curvas de Bézier,

para Matlab [5]; se creó un programa que permite manejar polígonos de apoyo de un número grande de puntos, y presenta como resultado el polígono de apoyo en color azul y la curva de Bézier resultante en color rojo.

La función )(Pbezier , puede recibir como datos la matriz de puntos },{ yxP y responde graficando el polígono de apoyo y la curva trazada para

cien intervalos de t ; o puede darse como argumento un vector vacío ( []=P ), en cuyo caso la respuesta es una interfase que permite la introducción de los puntos del polígono de apoyo en forma interactiva con el usuario.

Para el segundo caso la interfase presenta un área de trabajo limitada al intervalo ]10,10[− en cada una de los ejes. Los primeros 1−n puntos se van asignando con el botón derecho del ratón y el último punto n se asigna con el botón izquierdo. En este caso la pantalla se presenta de la forma que se muestra en la figura 8-1. Para la interfase gráfica de la figura 8-1 a), los círculos rojos indican el lugar donde se dio un click al ratón con el botón de la derecha. El cursor permite una mejor localización de las coordenadas deseadas. Al dar click izquierdo, automáticamente se incluye ese punto como el último del polígono y se inicia la construcción de la matriz de Bézier. Como resultado del proceso se presenta el polígono de apoyo en color azul y la curva de Bézier obtenida en color rojo, como se muestra en la figura 8-1 b)

Page 11: bezier

Curvas de Bézier

11 velasco y gonzález

Figura 8-1 : a) Interfase gráfica. b) Polígono y curva

9. El código. A continuación se incluye el código para Matlab, que ha sido probado

para las versiónes 5.3 en adelante:

function bezier(P) hold off plot(11,11) axis([-10 10 -10 10]) hold on n = length(P); if n==0 xy =[]; n=0; text(-5,9.5,'El botón izquierdo toma los puntos') text(-5,8.7,'El botón derecho toma el último punto') but=1;

Page 12: bezier

Curvas de Bézier

12 velasco y gonzález

while but==1 [xi,yi,but]=ginput(1); plot(xi,yi,'ro') n=n+1; x(n)=xi; y(n)=yi; xy(:,n)=[xi;yi]; end PoligonoDeApoyo=xy' else PoligonoDeApoyo= P for i=1:n x(i)=P(i,1); y(i)=P(i,2); end end s=n-1; for i=0:s coef(i+1)=(FACTORIAL(s)/(FACTORIAL(s-i)*FACTORIAL(i))); end if mod(n,2) == 0. m=1; else m=0; end b=zeros (n); for i=1:n u=0; for j=1:s+1 b(i,j)= coef(i)*(FACTORIAL(s)/(FACTORIAL(s-u) *FACTORIAL(u)))*(-1)^(i+j+m); u=u+1; end s=s-1; end t=0:.01:1; for i=1:101 for j=1:n vt(i,j)=t(i)^(n-j); end end for t=1:101 Pxt(t)=x*b*vt(t,1:n)';

Page 13: bezier

Curvas de Bézier

13 velasco y gonzález

Pyt(t)=y*b*vt(t,1:n)'; end Hold off plot(x,y,Pxt,Pyt,'r')

10. Ejemplos En esta sección se muestran un conjunto de ejercicios que van desde

casos simples hasta polígonos sumamente interesantes por su geometría, que con otro tipo de curvas interpolantes no se podrían generar.

En la figura 10-1 se incluye el ejemplo utilizado en el capítulo 3, para determinar un punto de la curva de Bézier para un 0t dado.

Para incluir los datos del polígono de apoyo se dan lo comandos correspondientes directamente desde la línea de comandos de Matlab; para nuestro ejemplo en la parte izquierda se muestran las líneas necesarias para formar el vector r y hacer la llamada a la función con ese argumento de la siguiente forma: )(rbezier ;

Además de mostrar la curva de Bézier, se presentan los componentes del vector del polígono de apoyo en el escritorio del área de trabajo de Matlab, como una ayuda para la revisión de coordenadas. Esta opción resulta muy útil en el caso de utilizar la introducción de datos por medio de la interfase gráfica.

En la figura 10-1 se ha marcado con un círculo rojo sobre la curva el punto correspondiente a 3333.00 =t , que corresponden a las coordenadas obtenidas durante el desarrollo de la forma geométrica de estas curvas,

)8518.7,85177.12()31( 00,0 ==tP

Page 14: bezier

Curvas de Bézier

14 velasco y gonzález

Figura 10-1 : Ejemplo del caso de estudio del capítulo 3

En la figura 10-2 a), se muestra el proceso de introducción de datos de

una curva dentro de un polígono cerrado utilizando la interfase gráfica; en este caso se pretende que el polígono de apoyo forme un rectángulo. En la figura 10-2 b) se presenta la curva de Bézier obtenida, y en la figura 10-2 c) el estado de la línea de comandos de Matlab al iniciar y terminar el despliegue.

Las figuras 10-3 a la 10-6, que se presentan a continuación, son curvas de diferentes características que se incluyen aquí como ejemplos de la versatilidad del método y del comportamiento del programa realizado.

En particular a la figura 10-5 se le quitó el polígono de apoyo, para mostrar la curva en una escala mayor.

Page 15: bezier

Curvas de Bézier

15 velasco y gonzález

Figura 10-2 : a) Introducción de datos. b) Curva de Bézier. c) Línea de comandos

Figura 10-3 : Espiral

Page 16: bezier

Curvas de Bézier

16 velasco y gonzález

Figura 10-4 : Forma caprichosa

Figura 10-5 : Curva de Bézier obtenida con un polígono cerrado (no se muestra polígono de apoyo)

Page 17: bezier

Curvas de Bézier

17 velasco y gonzález

Figura 10-6 : Polígono de apoyo arbitrario, de 33 puntos

11. Conclusiones Se ha presentado en este artículo una formal discusión sobre las curvas

interpolantes de Bézier, y aún cuando no es del interés de los autores profundizar en conceptos matemáticos complicados para el lector, se ha tenido cuidado de formalizar cada expresión presentada.

Las curvas interpolantes de Bézier son hoy en día una herramienta de apoyo para los diseñadores que enfrentan el reto de construir curvas suaves desde un punto inicial hasta uno final.

El programa realizado permite al usuario adentrarse en el conocimiento y manejo de estas curvas de una manera sencilla, al presentar una interfase gráfica amigable.

Debido a la restricción señalada en las propiedades, de que a mayor número de puntos de control se obtienen polinomios de alto grado, se considera un problema interesante subdividir las curvas de Bézier en dos, o más, unidas en puntos específicos, tal como se explicó en el capítulo 7; sin embargo este punto no lo hemos considerado en la función de programa, debido a que ésta permite recibir un número grande de puntos que forman el polígono de apoyo. Para fines experimentales la función fue probada con éxito

Page 18: bezier

Curvas de Bézier

18 velasco y gonzález

hasta para un polígono de apoyo de 33 puntos, restricción dada naturalmente por el sistema al no poder determinar el factorial de un número mayor de 32.

Las curvas obtenidas son siempre de un grado menor en uno que el número de puntos que define al polígono de apoyo, y para puntos simétricos se obtienen curvas simétricas.

La curva solo pasa forzosamente por el punto inicial y final del polígono de apoyo, y siempre se encuentra en la cubierta convexa de éste.

Las curvas de Bézier tienen un buen comportamiento no presentando oscilaciones erráticas.

Page 19: bezier

Curvas de Bézier

19 velasco y gonzález

12. Bibliografía

[1] Gerald Farin, Curves and Surfaces for Computer Aided Geometric Design, A practical Gide, Second Edition. Academic Press, Inc.

[2] R.L. Burden y J.D. Faires, Análisis Numérico 6 edición, International

Thompson Editores.

[3] S. Nakamura, Métodos Numéricos Aplicados con Software. Prentice Hall

[4] E. Kreiyszig, Matemáticas Avanzadas para Ingeniería. Limusa

[5] MATLAB The Language of Technical Computing, version 6, The Math Works Inc. Fourth Printing.

[6] http://rocbo.chez.tiscali.fr/Max/culture/bezier/bezier.htm

[7] http://astronomy.swin.edu.au/~pbourke/curves/bezier/

[8] http://loriweb.pair.com/7bezier.html