Curva de Bézier

ÔĽŅ
Curva de Bézier

Curva de Bézier

Construcción de una curva de Bézier.

Se denomina curvas de bezier a un sistema que se desarroll√≥ hacia los a√Īos 1960, para el trazado de dibujos t√©cnicos, en el dise√Īo aeron√°utico y de autom√≥viles. Su denominaci√≥n es en honor a Pierre B√©zier, quien ide√≥ un m√©todo de descripci√≥n matem√°tica de las curvas que se comenz√≥ a utilizar con √©xito en los programas de CAD.

Las curvas de B√©zier fueron publicadas, por primera vez en 1962 por el ingeniero de origen franc√©s Pierre B√©zier, que las us√≥ posteriormente, con profusi√≥n, en el dise√Īo de las diferentes partes de los cuerpos de un autom√≥vil, en sus a√Īos de trabajo en la Renault. Las curvas fueron desarrolladas por Paul de Casteljau usando el algoritmo que lleva su nombre. Se trata de un m√©todo num√©ricamente estable para evaluar las curvas de B√©zier.

Posteriormente, los inventores del PostScript, lenguaje que permiti√≥ el desarrollo de sistemas de impresi√≥n de alta calidad desde el ordenador, introdujeron en ese c√≥digo el m√©todo de B√©zier para la generaci√≥n del c√≥digo de las curvas y los trazados. El lenguaje PostScript sigue emple√°ndose ampliamente y se ha convertido en un est√°ndar de calidad universal; por ello, los programas de dise√Īo vectorial como Adobe Illustrator¬ģ (Ai), el extinto Macromedia FreeHand (FH*)¬ģ, Corel Draw (Cdr)¬ģ,tres de los m√°s importantes programas de dibujo vectorial y otros como Inkscape, denominan como "b√©zier" a algunas de sus herramientas de dibujo, y se habla de "Trazados b√©zier", "pluma b√©zier", "l√°piz b√©zier", etc. Su facilidad de uso la ha estandarizado en el dise√Īo gr√°fico, extendi√©ndose tambi√©n a programas de dise√Īo de p√°ginas web como Adobe Flash¬ģ (FL*), y retoque fotogr√°fico (bitmap) como Photoshop, donde se usa para crear formas cerradas o selecciones.

La idea de definir geométricamente las formas no es demasiado compleja: un punto del plano puede definirse por coordenadas. Por ejemplo, un punto A tiene unas coordenadas (x1, y1) y a un punto B le corresponde (x2,y2). Para trazar una recta entre ambos basta con conocer su posición.

Si en lugar de unir dos puntos con una recta se unen con una curva, surgen los elementos esenciales de una curva B√©zier: los puntos se denominan puntos de anclaje o nodos. La forma de la curva se define por unos puntos invisibles en el dibujo, denominados puntos de control, manejadores o manecillas. En general, para trazar segmentos rectos se hace clic con el √ļtil de dibujo (la pluma), se mueve el rat√≥n y se hace clic en un nuevo punto, y as√≠ sucesivamente. Para crear segmentos suaves, curvados, se hace clic y se mantiene apretado el bot√≥n mientras se ajusta la forma de la curva. Esta forma puede modificarse posteriormente, moviendo los puntos de control seg√ļn se desee. Los segmentos rectos pueden conectarse con segmentos curvos.

Contenido

Examen de los casos

Curvas lineales de Bézier

Dados los puntos P0 y P1, una curva lineal de Bézier es una línea recta entre los dos puntos. La curva viene dada por la expresión:

\mathbf{B}(t)=\mathbf{P}_0 + (\mathbf{P}_1-\mathbf{P}_0)t=(1-t)\mathbf{P}_0 + t\mathbf{P}_1 \mbox{ , } t \in [0,1].

Curvas cuadráticas de Bézier

Una curva cuadrática de Bézier es el camino trazado por la función B(t), dados los puntos: P0, P1, y P2,

\mathbf{B}(t) = (1 - t)^{2}\mathbf{P}_0 + 2t(1 - t)\mathbf{P}_1 + t^{2}\mathbf{P}_2 \mbox{ , } t \in [0,1].

Las fuentes de letras TrueType usan curvas de Bézier desdobladas compuestas por curvas cuadráticas de Bézier.

Curvas c√ļbicas de B√©zier

Curva c√ļbica de B√©zier donde se aprecian los puntos o nodos de anclaje P1 y P2

Cuatro puntos del plano o del espacio tridimensional, P0, P1, P2 y P3 definen una curva c√ļbica de B√©zier. La curva comienza en el punto P0 y se dirige hacia P1 y llega a P3 viniendo de la direcci√≥n del punto P2. Usualmente, no pasar√° ni por P1 ni por P2. Estos puntos s√≥lo est√°n ah√≠ para proporcionar informaci√≥n direccional. La distancia entre P0 y P1 determina "qu√© longitud" tiene la curva cuando se mueve hacia la direcci√≥n de P2 antes de dirigirse hacia P3.

La forma paramétrica de la curva es:

\mathbf{B}(t)=\mathbf{P}_0(1-t)^3+3\mathbf{P}_1t(1-t)^2+3\mathbf{P}_2t^2(1-t)+\mathbf{P}_3t^3 \mbox{ , } t \in [0,1].

Los modernos sistemas de im√°genes como PostScript, Asymptote y Metafont usan curvas de B√©zier desdobladas, compuestas por curvas c√ļbicas de B√©zier para dibujar las formas de las curvas.

Generalización

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:

\mathbf{B}(t)=\sum_{i=0}^n {n\choose i}\mathbf{P}_i(1-t)^{n-i}t^i =\mathbf{P}_0(1-t)^n+{n\choose 1}\mathbf{P}_1(1-t)^{n-1}t+\cdots+\mathbf{P}_nt^n \mbox{ , } t \in [0,1].

Por ejemplo, una curva de orden cinco (n = 5) quedaría como:

\mathbf{B}(t)=\mathbf{P}_0(1-t)^5+5\mathbf{P}_1t(1-t)^4+10\mathbf{P}_2t^2(1-t)^3+10\mathbf{P}_3t^3(1-t)^2+5\mathbf{P}_4t^4(1-t)+\mathbf{P}_5t^5 \mbox{ , } t \in [0,1].

Esta ecuación puede ser expresada de manera recursiva como sigue: sea la expresión \mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_n} que denota la curva de Bézier determinada por los puntos P0, P1,..., Pn. Entonces

\mathbf{B}(t) = \mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_n}(t) = (1-t)\mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_{n-1}}(t) + t\mathbf{B}_{\mathbf{P}_1\mathbf{P}_2\ldots\mathbf{P}_n}(t)

En otras palabras, el grado n de la curva de B√©zier es una interpolaci√≥n entre los dos grados n ‚ąí 1 de las curvas de B√©zier.

Terminología

Existe una terminología asociada exclusivamente para este tipo de curvas. Se tiene:

\mathbf{B}(t) = \sum_{i=0}^n \mathbf{P}_i\mathbf{b}_{i,n}(t),\quad t\in[0,1]

donde las polinomiales

\mathbf{b}_{i,n}(t) = {n\choose i} t^i (1-t)^{n-i},\quad i=0,\ldots n

son conocidas como polinomios de Bernstein de grado n, definidos por 00 = 1.

Los puntos Pi son llamados puntos de control para de las curvas de Bézier. El polígono formado por la conexión de los puntos de Bézier con rectas, comenzando por P0 y terminando en Pn, se denomina polígono de Bézier (o polígono de control). La envolvente convexa del polígono de Bézier contiene las curvas de Bézier.

Notas

  • La curva de B√©zier se encuentra en el interior de la envolvente convexa de los puntos de control.
  • La curva de B√©zier es infinitamente derivable.
  • El control de la curva es global. Modificar un punto de control implica modificar completamente la curva.
  • Para efectuar una transformaci√≥n af√≠n de la curva es suficiente efectuar la transformaci√≥n sobre todos los puntos de control.
  • La curva comienza en el punto P0 y termina en el Pn. Esta peculiaridad es llamada interpolaci√≥n del punto final.
  • La curva es un segmento recto si, y s√≥lo si, todos los puntos de control est√°n alineados.
  • El comienzo (final) de la curva es tangente a la primera (√ļltima) secci√≥n del pol√≠gono de B√©zier.
  • Una curva puede ser desdoblada en algunos puntos en dos curvas, o de manera arbitraria en tantas curvas como se quieran, cada una de las cuales es una nueva curva de B√©zier.
  • Algunas curvas que parecen simples, tales como una circunferencia, no pueden ser descritas de manera exacta mediante curvas de B√©zier o segmentos de esta clase de curvas (por raro que parezca una curva formada a su vez por cuatro segmentos de curva puede aproximarse a un c√≠rculo, con un error radial m√°ximo menor de una parte por mil, en cada punto de control interno la distancia es \left(\frac{4}{3}\sqrt {2}-1\right) de manera horizontal o vertical de un punto de control del exterior sobre el c√≠rculo unidad).
  • La curva compensada obtenida a partir de una curva de B√©zier dada, frecuentemente llamada curva compensada (falsa "paralela" a la curva original, como los ra√≠les en una v√≠a de tren) no puede ser trazada de manera exacta mediante curvas de B√©zier. De todas formas hay m√©todos heur√≠sticos que proporcionan, normalmente, una aproximaci√≥n adecuada en algunos prop√≥sitos pr√°cticos.

Construcción de curvas de Bézier

Curvas lineales

Bezier linear anim.gif

La t en la función para la curva lineal de Bézier se puede considerar como un descriptor de cuán lejos está B(t) de P0 a P1. Por ejemplo cuando T = 0.25, B(t) es un cuarto de la longitud entre el punto P0 y el punto P1. Como t varía entre 0 y 1, B(t) describe un línea recta de P0 a P1

Curvas cuadr√°ticas

Para curvas cuadráticas se pueden construir puntos intermedios desde Q0 a Q1 tales que t varía de 0 a 1:

  • Punto Q0 var√≠a de P0 a P1 y describe una curva lineal de B√©zier.
  • Punto Q1 var√≠a de P1 a P2 y describe una curva lineal de B√©zier.
  • Punto B(t) var√≠a de Q0 a Q1 y describe una curva cuadr√°tica de B√©zier.
Construcción de una curva cuadrática de Bézier
Animación en t \in [0,1]


Curvas de órdenes superiores

Para curvas de orden superior se necesitan, l√≥gicamente, m√°s puntos intermedios. Para curvas c√ļbicas se pueden localizar puntos intermedios Q0, Q1 y Q2 que describen las curvas lineales de B√©zier y los puntos R0 y R1 que describen las curvas cuadr√°ticas:

Construcci√≥n de una curva c√ļbica de B√©zier
Animación t en el intervalo [0,1]


Y para curvas de grado 4, se pueden localizar los puntos intermedios Q0, Q1, Q2 y Q3 que describen las curvas lineales de B√©zier, los puntos R0, R1 y R2 que describen las curvas cuadr√°ticas y los puntos S0 y S1 que describen las curvas c√ļbicas.

Construcción de una curva de Bézier de cuarto orden.
Animación, t en el intervalo [0,1]


Aplicaciones

Gr√°ficos de ordenador

Las curvas de Bézier han sido ampliamente usadas en los gráficos generados por ordenador para modelado de curvas suaves. Como la curva está completamente contenida en la envolvente convexa de los puntos de control, dichos puntos pueden ser visualizados gráficamente sobre el área de trabajo y usados para manipular la curva de una forma muy intuitiva. Las transformaciones afines tales como traslaciones y rotaciones pueden ser aplicadas, con gran facilidad, a las curvas, aplicando las transformaciones respectivas sobre los puntos de control.

Las curvas cuadr√°ticas y c√ļbicas son muy corrientes. Las curvas de grados superiores son m√°s dif√≠ciles de evaluar. Cuanto m√°s complejas son las superficies que se necesitan, las curvas de bajo orden son menos apropiadas. Para garantizar la suavidad de las curvas el punto de control en el que se juntan dos curvas y el punto de control sobre cualquiera de los lados debe ser colineal. Esta opci√≥n est√° frecuentemente desactivada en programas como Adobe Illustrator o Inkscape. Estas curvas poli-B√©zier pueden ser observadas en el formato de archivo SVG.

El método más simple para rasterizar una curva de Bézier es evaluarla en muchos puntos espaciados, muy próximos entre sí, y escanearla aproximando la secuencia de segmentos lineales.

Esta manera de proceder no garantiza un resultado con la suficiente suavidad porque los puntos pueden estar espaciados demasiado separados. A la inversa, se pueden generar bastantes puntos de control en √°reas donde la curva esta cercana a la forma lineal.

Un m√©todo adoptado, muy com√ļn, es la subdivisi√≥n recursiva, en el que los puntos de control de la curva son ajustados para ver si la curva se aproxima a segmentos lineales sin peque√Īas tolerancias. Si esto no se logra, la curva es subdividida param√©tricamente en dos segmentos 0 \le t \le 0.5 y 0.5 \le t \le 1 y el mismo procedimiento se aplica por recursividad a cada mitad.

Tambi√©n hay m√©todos que usan la diferenciaci√≥n, pero se debe tener cuidado y analizar los errores de propagaci√≥n. Los m√©todos anal√≠ticos donde un desdoble es intersectado con cada l√≠nea escaneada hallando ra√≠ces de polinomios de grado tres (por segmentaci√≥n c√ļbica) y con m√ļltiples ra√≠ces, pero no son frecuentes en la pr√°ctica.

Síntesis de sonido

La síntesis de Bézier es un nuevo método de síntesis de ondas sonoras que se puede usar para crear sonidos usando curvas de Bézier.

Ejemplo de código

El c√≥digo que se lista a continuaci√≥n es un ejemplo pr√°ctico que muestra como se traza una curva c√ļbica de B√©zier en un programa usando lenguaje de programaci√≥n C. N√≥tese que este simplemente calcula los coeficientes de un polinomio y se ejecuta a trav√©s de una serie de valores de t comprendidos en el intervalo [0,1]. En la pr√°ctica no es como se procede de manera normal. Con frecuencia, una soluci√≥n recursiva es m√°s r√°pida, consumiendo menos ciclos de procesador y a expensas de requerir m√°s memoria para el c√°lculo, de manera temporal. Incluso el m√©todo directo ilustrado aqu√≠ es m√°s f√°cil de comprender y produce el mismo resultado. El siguiente c√≥digo ha sido compilado para hacer esta operaci√≥n m√°s clara. En la pr√°ctica una optimizaci√≥n podr√≠a ser calcular los coeficientes una vez y posteriormente usar los resultados para reprocesarlos y calcular los puntos de la curva. Aqu√≠ son recalculados cada vez, lo que es menos eficiente pero ayuda a clarificar el c√≥digo.

La curva resultante puede ser trazada dibujando líneas entre puntos sucesivos en la matriz de la curva. A más puntos más suavidad en la silueta de la curva.

En algunas arquitecturas, el código de abajo puede ser optimizado también por programación dinámica. Por ejemplo donde dt es constante, cx * t cambia una cantidad constante con cada iteración. Por aplicación repetida, el bucle puede ser reescrito sin ninguna multiplicación, aunque tal procedimiento no es numéricamente estable.

/*
C√≥digo para generar una curva c√ļbica de B√©zier
*/
 
typedef struct
{
    float x;
    float y;
}
Point2D;
 
/*
cp es una matriz de 4 elementos donde:
cp[0] es el primer punto, o P0 en el diagrama de abajo
cp[1] es el primer punto de control, o P1 en el diagrama de abajo
cp[2] es el segundo punto de control, o P2 en el diagrama de abajo
cp[3] es el punto final, o P3 en el diagrama de abajo
t es el valor del par√°metro, 0 <= t <= 1
*/
 
Point2D PointOnCubicBezier( Point2D* cp, float t )
{
    float   ax, bx, cx;
    float   ay, by, cy;
    float   tSquared, tCubed;
    Point2D result;
 
    /* c√°lculo de los coeficientes polinomiales */
 
    cx = 3.0 * (cp[1].x - cp[0].x);
    bx = 3.0 * (cp[2].x - cp[1].x) - cx;
    ax = cp[3].x - cp[0].x - cx - bx;
 
    cy = 3.0 * (cp[1].y - cp[0].y);
    by = 3.0 * (cp[2].y - cp[1].y) - cy;
    ay = cp[3].y - cp[0].y - cy - by;
 
    /* calculate the curve point at parameter value t */
 
    tSquared = t * t;
    tCubed = tSquared * t;
 
    result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
    result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
 
    return result;
}
 
/*
 ComputeBezier fills an array of Point2D structs with the curve   
 points generated from the control points cp. Caller must 
 allocate sufficient memory for the result, which is 
 <sizeof(Point2D) numberOfPoints>
*/
 
void ComputeBezier( Point2D* cp, int numberOfPoints, Point2D* curve ) {
    float   dt;
    int	  i;
 
    dt = 1.0 / ( numberOfPoints - 1 );
 
    for( i = 0; i < numberOfPoints; i++)
        curve[i] = PointOnCubicBezier( cp, i*dt );
}

Otra aplicación de las curvas de Bézier es la descripción de los pasos para el movimiento de objetos en animaciones, etc. Aquí la x y las posiciones de la curva no son usadas para trazar la curva pero sí la posición en la gráfica. Cuando se usa de este modo, la distancia entre puntos sucesivos puede llegar a ser muy importante y, en general, estos no están espaciados de manera ecuánime. Si se requiere una linealidad en el movimiento, para procesar el cálculo más rápido, incluso en contra del camino deseado es necesario desdoblar los puntos resultantes .

Curvas racionales de Bézier

Este tipo de curvas ajustan automáticamente los coeficientes de las ecuaciones paramétricas para obtener una aproximación a una figura arbitraria. El numerador es una ponderación de una curva Bézier en su forma de Berstein y el denominador es una suma ponderada de polinomios de Berstein.

Dados n + 1 puntos de control Pi, la curva racional puede ser descrita por:

 
\mathbf{B}(t) =
\frac{
\sum_{i=0}^n b_{i,n}(t) \mathbf{P}_{i}w_i 
}
{
\sum_{i=0}^n b_{i,n}(t) w_i 
}

o simplemente:

 
\mathbf{B}(t) =
\frac{
\sum_{i=0}^n {n \choose i} t^i (1-t)^{n-i}\mathbf{P}_{i}w_i 
}
{
\sum_{i=0}^n {n \choose i} t^i (1-t)^{n-i}w_i 
}.

Véase también

Referencias

Enlaces externos

Obtenido de "Curva de B%C3%A9zier"

Wikimedia foundation. 2010.

Mira otros diccionarios:

  • curva ‚ÄĒ s. f. 1.¬†Linha curva. 2.¬†Gr√°fico que representa as varia√ß√Ķes de um fen√īmeno. 3.¬†Volta em forma de linha curva numa via qualquer. 4.¬†Parte posterior do joelho. 5.¬†Pe√ßa arqueada de um m√≥vel. 6.¬† [Marinha] Caverna. 7.¬† [Matem√°tica] Lugar das… ‚Ķ   Dicion√°rio da L√≠ngua Portuguesa

  • B-spline ‚ÄĒ Saltar a navegaci√≥n, b√ļsqueda En el subcampo matem√°tico de an√°lisis num√©rico, una B spline es una funci√≥n spline que tiene el m√≠nimo apoyo con respecto a un determinado grado, suavidad, y partici√≥n del dominio. Un teorema fundamental establece… ‚Ķ   Wikipedia Espa√Īol

  • Algoritmo de de Casteljau ‚ÄĒ Saltar a navegaci√≥n, b√ļsqueda 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 B√©zier, toma su nombre de ‚Ķ   Wikipedia Espa√Īol

  • Algoritmo de De Casteljau ‚ÄĒ 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… ‚Ķ   Wikipedia Espa√Īol

  • Polinomio de Bernstein ‚ÄĒ Saltar a navegaci√≥n, b√ļsqueda Los polinomios de Bernstein o polinomios en la base de Bernstein son una particular clase de polinomios (en el campo de los n√ļmeros reales), tales polinomios son utilizados dentro del √°mbito del an√°lisis num√©rico. El ‚Ķ   Wikipedia Espa√Īol

  • Spline ‚ÄĒ Un tipo de spline, una curva de B√©zier. En el subcampo matem√°tico del an√°lisis num√©rico, un spline es una curva diferenciable definida en porciones mediante polinomios. En los problemas de interpolaci√≥n, se utiliza a menudo la interpolaci√≥n… ‚Ķ   Wikipedia Espa√Īol

  • Biblioteca Ming ‚ÄĒ Saltar a navegaci√≥n, b√ļsqueda Ming [1] Informaci√≥n general √öltima versi√≥n estable 0.3.0 15 de Febrero, 2006 ‚Ķ   Wikipedia Espa√Īol

  • METAFONT ‚ÄĒ Desarrollador Donald Knuth Informaci√≥n general ‚Ķ   Wikipedia Espa√Īol

  • NURBS ‚ÄĒ Este art√≠culo o secci√≥n sobre inform√°tica y tecnolog√≠a necesita ser wikificado con un formato acorde a las convenciones de estilo. Por favor, ed√≠talo para que las cumpla. Mientras tanto, no elimines este aviso puesto el 4 de diciembre de 2007.… ‚Ķ   Wikipedia Espa√Īol

  • Adobe InDesign ‚ÄĒ Desarrollador Adobe Systems http://www.adobe.com/es/products/indesign/index.html Informaci√≥n general √öltima versi√≥n estable ‚Ķ   Wikipedia Espa√Īol


Compartir el artículo y extractos

Link directo
… Do a right-click on the link above
and select ‚ÄúCopy Link‚ÄĚ

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.