CURVAS DE BEZIER
PRESENTADO A: PRESENTADO POR: Código:
ANALISIS MATEMATICO
Fecha Presentación: 21 Febrero de 2011
Bucaramanga
CURVAS DE BEZIER 1. Marco Teórico La idea de unir sucesivamente arcos polinomiales parte del trabajo de dos ingenieros que ejercieron su actividad en las fábricas de automóviles Citroën y Renault. Se trata de P. de Casteljan y Pierre Bézier, quienes a finales de los años 50 y principios de los 60 desarrollaron sistemas de modelado (para aplicación al diseño de carrocerías) totalmente similares, aunque el trabajo del primero de ellos quedo como documento interno, mientras que el sistema UNISURF de Renault (implementado por Bézier) fue ampliamente publicado. De aquí que el tipo de curvas y superficies que ambos estudiaron lleve hoy en día el nombre de Bézier. La idea en una curva de Bézier esta en considerar una base especial del espacio del polinomio que permite una excelente interpretación geométrica de los coeficientes de un polinomio cuando son expresados en función de dicha base. Esta es la denominada Base de Bernstein, que fue descrita en 1912 por S. Bernstein, quien lo empleo en el contexto de la aproximación uniforme a funciones continuas Polinomios de Bernstein
Los polinomios de Bernstein o polinomios en la base de Bernstein son una clase particular de polinomios en el campo de los números reales, que son utilizados dentro del ámbito del análisis numérico.
Donde
Son los coeficientes binomicos
Se denomina Polinomio de Bernstein y generalmente solo se define para que es donde se manifiestan sus importantes propiedades
x
En el caso de un polinomio de grado 2 la base en [0,1] está compuesta de:
Un polinomio expresado en esta base tendría entonces la forma:
Construccióncurvas de Bézier
Una curva de Bézier está formada por varios segmentos, pueden ser curvos o rectos. La curva puede ser abierta o cerrada. Éste es un ejemplo de curva de Bézier, sobre el que se explicarán los distintos conceptos: Puntos de apoyo
Son los puntos extremos de los segmentos. Por ellos pasa la curva y siempre hay que definirlos. En general, cuando se crean curvas de Bézier se procura que haya la menor cantidad posible de puntos de apoyo. Puntos de control
Son los puntos a los que «intenta acercarse» la curva, aquéllos que definen su curvatura. Siempre hay que definirlos. La curvatura de cada segmento viene definido por un punto de control, dos o ninguno. Líneas de control
Unen los puntos de apoyo con los puntos de control. Son meras referencias para ayudar en la creación de las curvas, luego no aparecen.
Para iniciar en el tema de curvas de Bézier es necesario considerar cuatro puntos Po, P1, P2, P3 que forman el polígono de apoyo. La curva iniciará en el punto Po y finalizará en elpunto P3; su trayectoria para ir del punto de inicio al punto final depende de laposición de los puntos P1y P2. Como es de notar, en todos los casos el grado nde la curva es menor en uno que el número de puntos del polígono de apoyo. Los puntos del polígono deapoyo quedan identificados de la siguiente manera Po =P0,3 P1= P1,3 P2 =P2,3 P3=P3,3
Sea t un parámetro valuado a lo largo de la curva, cuyos valores posiblesson: 0 t 1, es decir, los puntos sobre la curva se definirán de acuerdo con elparámetro t , en la curva B( t ), y se cumple que en los puntos extremos de la curvaB(0) = P0,3y B(1) = P3,3. La curva de Bézier de grado n puede ser generalizada de la siguiente manera. Dados los puntos P0 , P1 ,..., Pn, la curva de Bézier es del tipo:
De una manera más general:
Donde las polinomiales
2. Ejemplos curvas de Bézier con polinomio aplicado Estos ejemplos se encuentran en una hoja anexa al final del trabajo ya que son aplicados directamente desde los puntos hacia el polinomio 3. Código en matlab para las curvas de Bézier function bezier(P) plot(30,30) axis([-80 80 -90 90]) holdon n = length(P); if n==0 xy =[]; n=0; text(5,26.5,'El botón izquierdo toma los puntos') text(5,23.1,'El botón derecho toma el último punto') but=1; while but==1 [xi,yi,but]=ginput(1); plot(xi,yi,'r+') 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: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)'; Pyt(t)=y*b*vt(t,1:n)'; end plot(x,y,Pxt,Pyt,'r')
Es importante mencionar que este codigo no es hecho por mi, fue sacado de la pagina http://www.des_ia.umich.mx/~fvelasco/investigacion/bezier.pdf 4. Aplicación Para mi propia aplicación decidí realizar un dibujo, basándome en su forma original, los puntos fueron tomados en base a mi observación, tratando siempre que fuera lo mas preciso posible, se aquí se puede observar que entre mas puntos se le de a la forma que se quiere mostrar mas preciso será, en especial en las partes donde el dibujo debe ser recto, ya que, al tomar pocos puntos tiende a tomar una forma curva y no una recta. Es importante mencionar que aunque el dibujo se logro lo mas parecido posible de acuerdo a la imagen original, hizo falta el color, esto debido a que las partes al estar algo entrelazadas entre ellas el color se confundía y no se lograba una imagen bien presentada, por eso preferí dejarla solo para rellenar. Pero esto puede ser una aplicación para una actividad infantil para rellenar el dibujo, siempre se le puede encontrar un propósito
Esta es la imagen original
Esta es la imagen lograba con la función de bezier en matlab 5. Conclusiones Analizando
la utilidad de bezier puedo concluir que es una herramienta muy importante a la hora de tratar con gráficos y con puntos, ya que al querer hacer un dibujo buscamos la precisión mas grande y bezier es una herramienta que se presta para esto
Si se quiere obtener una precisión grande, entre mas puntos se manejen mas aproximado será el resultado al dibujo original
Puedo verle la utilidad que origino que Bezier y Casteljan buscaran una forma de hacer precisos las figuras que querían soldar en los carros, ya que es mas fácil, poner a predecir en la curva el comportamiento de una serie de puntos
Al
hacerle una rápida comparación con spline, puedo decir que es mas preciso y mas útil bezier, ya que spline solo maneja hasta grado 3 y las curvas de bezier permite llevar el polinomio deseado, y como ya se dijo que entre mas grado sea el polinomio mas preciso será.
Del polinomio de bezier se puede decir que siempre es de un grado menor que el numero de puntos utilizado y que la unión de puntos se da especialmente entre el primer y el ultimo punto
Ojo para que funcione utilizamos: un vector P vacio de la siguiente forma P[]; bezier(P)