Categories
Rafa

La curva Bezier

LA CURVA BÉZIER

LA CURVA BÉZIER

Un  intento de deducir la fórmula de esta famosa curva

 

Rafael Nieto Yosten

 

Introducción:

Como podrás ver, justo aquí arriba se encuentra una curva con un par de líneas rectas, tal vez se te haga muy familiar, a simple vista, no es mas que una simple curva.  Sin embargo esta curva a resultado ser de gran utilidad y ha tenido muchas aplicaciones, como en el diseño de automóviles, de aviones, o cualquier dibujo hecho por computadora.

 

Las computadoras siempre se han caracterizado por ser demasiado “cuadradas” en sus dibujos, y es por eso que se empezaron a hacer las curvas, ya que las computadoras adquirieron más poder de procesamiento… hubo muchos diferentes tipos de curvas, pero, de alguna manera u otra, la curva Bézier llegó a ser la más popular y la más usada en el dibujo por computadora.

 

Una de las ventajas de esta curva es que las variables que definen la curva tienen mucho que ver con su aspecto, además de que la curva se ve bonita.  El final de cada una de las 2 líneas rectas que salen desde los puntos donde la curva está “anclada”, son los puntos control, estos actúan como un imán que jala la curva hacia ellos.  Así, moviendo los puntos control se puede darle a la curva casi cualquier forma deseada.

 

A esta curva también se le conoce como un B-Spline, y para definirla solo se necesitan cuatro puntos: el punto de inicio (P0), el punto control 1 (P1), el punto control 2 (P2) y el punto final (P3).  Hay que aclarar que el B-Spline es un tipo de curva Bézier, pues la curva original Bézier en realidad puede tomar cualquier número de puntos control, y cada uno atrae a la curva un poco para darle forma.  El B-Spline, en cambio, sólo toma 2 puntos control, sin embargo, se pueden crear curvas muy grandes y complejas uniendo muchas pequeñas curvas B-Spline.

 

 

 

Lo que se pretende deducir y explicar en este texto

 

Primero que nada, este texto esta escrito por un estudiante de primer semestre de carrera (yo), y no cuento con los suficientes conocimientos para explicar todo acerca de las ecuaciones de esta curva.

 

La fórmula original de la curva Bézier, está basada en un polinomio especial que inventó el matemático Bernstein, y este polinomio, como dicen, “está en chino”, y claro, esta formula funciona para cualquier número de puntos control.

 

Esta fórmula original no la voy a tratar de explicar aquí, sino trataré de explicar la fórmula de un B-Spline, eso es, la curva con un punto de inicio, un punto final y sus 2 puntos control, aunque la fórmula para esta curva obviamente deriva de la fórmula original, yo me fui por mi propio camino para llegar al mismo lugar (pero más fácilmente).

 

Una explicación del B-Spline

 

 

Aquí podemos ver la curva B-Spline un poco más detallada, una cosa muy importante para poder deducir fórmulas es observar atentamente las características del problema a resolver, en este caso, tenemos que observar bien las características de esta curva.  No vamos a irnos a propiedades matemáticamente muy rigurosas y difíciles de entender, sino a características simples que yo creo que son fáciles de captar a simple vista..

 

Primero que nada, aquí vemos que la curva empieza en un punto (P0) y termina en otro (P3), eso es una característica.  Pero, lo que es más importante de todo es que la recta que va de P0 a P1 es tangente a la curva en el punto P0, y la recta que va de P2 a P3 es tangente a la curva en el punto P3.  Yo prolongué las rectas con una línea gris para que esto se viera más claramente.  Hasta aquí ya tenemos suficientes propiedades como para tratar de hacer una curva parecida a esta.

 

Pendientes cambiantes

Nosotros sabemos que podemos obtener la pendiente de la recta tangente a una función, utilizando la derivada.  Así que vamos a empezar a intentar de sacar nuestra primera curva con una ecuación de tipo:

Donde calculamos un valor y en función de un valor x, espero que ya sepas graficar pues aquí no es el lugar para aprender a hacerlo.

Vamos a suponer que yo quiero una curva que en una posición inicial x1 tenga una pendiente inicial de m1, y que en una posición final x1, tenga una pendiente final de m2.  Ahora sí, prepárense para lo bueno, porque vamos que tener que usar algo de matemáticas.

 

Diferencia entre las curvas y las rectas

Antes de empezar a poner un montón de ecuaciones, quiero explicar un poco por que metí esto de pendientes y rectas tangentes, hasta mencioné derivadas… Hay que entender la naturaleza de las curvas.  La gran diferencia entre una curva y una recta es su pendiente.  Una recta tiene la misma pendiente en todos sus puntos, y una curva, en cambio, tiene una pendiente diferente en cada uno de sus puntos.

 

El robot que dibuja líneas y curvas

Imaginemos que tenemos un robot que está hecho de manera que al ir caminando, va dejando tinta por donde pasa.  Si quisiéramos dibujar una línea recta, simplemente lo colocamos en una dirección y dejamos que avance.  En cambio, si queremos que dibuje una curva, el robot tendría que ir cambiando de dirección para dejar la forma de una curva.  Esa dirección que lleva el robot en determinada parte de la curva, es la pendiente de la curva.

 

 

Aquí podemos ver una recta muy simple cuya ecuación es:

Aquí marqué varios puntos tratando de dibujar la recta tangente de esta recta en cada punto, pero no se puede notar nada pues la misma recta es su recta tangente en todos sus puntos.  Si derivamos esta función obtenemos que:

 o sea, una constante.  La pendiente siempre será 1 /2 para esta función.

Aquí tenemos ya un caso muy diferente, una curva cuya ecuación es:

Se puede observar muy claramente que la pendiente cambia conforme avanza la curva.  Si derivamos la función obtenemos lo siguiente:

Al ver esta derivada nos damos cuenta que la pendiente ( y’ ) cambia en función de x, y por lo tanto, no es constante.

 

 

El hecho de que “la pendiente cambia” es la base que vamos a utilizar para tratar de encontrar ecuaciones de las curvas que queremos.  Retomemos la idea de hacer una curva que en un punto tenga una determinada pendiente, y en otro punto tenga otra pendiente. 

 


Pongámoslo así:

 

 

 

Disculpa un poco por mis dibujos, pues están hechos solo con unos pequeños programitas que hice y algo de ayuda de Paint, así que no están 100% exactos pero solo son para que se puede entender mejor la explicación.

 

Aquí vemos como la curva (cuya ecuación no conocemos), tiene una pendiente M1 en X1, y una pendiente M2, en X2, ahora, nosotros sabemos que de alguna manera, la pendiente m tiene que  ir de M1 a M2 cuando x cambie de X1 a X2.  Tenemos que crear una función  en donde m sea  igual a M1 cuando x sea igual a X1, y m sea igual a M2 cuando x sea igual a X2.  Esto es como si tuviéramos 2 puntos (X1, M1) y (X2, M2).  Lo más lógico sería ir cambiando m de M1 a M2 proporcionalmente conforme x cambie de X1 a X2; para esto podemos usar la ecuación de la recta para crear la función, basándonos en los 2 puntos que tenemos.

 

No te vayas a espantar con lo que acabo de decir, la ecuación de la recta la estamos aprovechando para crear una relación proporcional entre m y x, y no precisamente para crear una recta.  Si te pones a  analizar la ecuación de la recta obtenida a partir de 2 puntos, te darás cuenta que lo que estamos haciendo sí tiene sentido.  Si tenemos dos puntos (x1, y1) y (x2, y2); y utilizamos la fórmula de la recta a partir de 2 puntos, encontraremos una ecuación que, cuando x = x1, entonces y = y2, y cuando x = x2, entonces y = y2.  Lo mismo estamos haciendo nosotros, pero en vez de usar una coordenada Y como variable dependiente, estamos yéndonos a un nivel más “profundo”, y usamos la pendiente M como variable dependiente.

 

Ahora sí, encontremos nuestra ecuación .

Aquí tenemos la fórmula para la ecuación de la recta a partir de 2 puntos:

 

Pero en lugar de usar las Y, vamos a usar la M, y entonces nos quedaría así:

Despejamos:

 

Ahora algo muy importante que notar aquí, f(x) es una función que nos va a dar la pendiente de la curva, en x.  Nosotros bien sabemos que la derivada de una función, nos da otra función que es la que nos da la pendiente.  Pero aquí  f(x) es una función que nos da la pendiente, así que para poder encontrar la ecuación de la curva cuya pendiente es f(x), simplemente hacemos el proceso inverso, o sea que integramos la función f(x)!.

 

Entonces, vamos a decir que nuestra función de la curva va a ser de la forma

Así que para obtenerla, vamos a integrar:

Como verás, la fórmula no está tan bonita que digamos, pero debe funcionar, así que vayamos a intentar.  Hay algo que tenemos que hacer notar, esa C que está al final de nuestra ecuación integrada, según nuestras fórmulas de integración, siempre hay una C al final de la fórmula integrada.  Te preguntarás, ¿y que significa esa C?.

 

Hay dos maneras de entender que es esa C.  Al derivar una función que tiene una parte constante, esa parte desaparece en la función integrada.  Ejemplo:

¿Y que pasó con el 6 que estaba en la fórmula inicial?, pues desaparece pues es una constante, y la derivada de una constante es 0.  Sin embargo, cuando integramos, como no sabemos que número constante es el que estaba en la fórmula antes de ser derivada, simplemente se pone una C indicando que es esa constante que desapareció.

 

La otra manera, es entender gráficamente que representa la C.  La C es el punto de inicio de nuestra función:

 

La C es cuanto vale y cuando la curva intersecta con el eje Y, es decir, cuando la x vale 0.  Así que con la C podemos establecer la y inicial, cuando x valga 0.

 

Ahora que ya sabemos que significa, todo, hay que probar nuestras fórmulas para hacer una curva.  Digamos que queremos una curva que pase por el punto (0, 2), y que cuando x valga 3, tenga una pendiente de 7/4, y que cuando x valga 10, tenga una pendiente de –6/7.  Nuestras constantes quedarían así:

Como el punto por donde debe pasar es (0, 2), o sea, que ya y valga 2 cuando la x valga 0, entonces podemos asignar eso a la C:

El resto de las constantes es fácil de asignarlas:

Nuestra fórmula dice:

 

 


Sustituimos:

 

Veamos como quedó nuestra curva:

Si graficas la ecuación obtenida, te debió haber quedado una curva parecida a esta.

Con la fórmula que usamos, podemos establecer un punto (0, C) por donde pase la curva, y establecer las pendientes m1 y m2 en x1 y x2 respectivamente.  Aunque puede ser útil, esta manera de crear curvas es limitada.

Primero que nada, sólo podemos establecer un punto por donde queremos que pase la curva, y de ese punto sólo podemos establecer la coordenada Y, pues la coordenada X ya está establecida como 0.  Lo que nosotros queremos es poder establecer dos puntos, un punto inicial (x0, y0), y otro punto final (x3, y3) por donde pase la curva.

 

Las ecuaciones paramétricas

Otra desventaja de nuestra curva es que está dada como una función .  Una función es una relación en donde para cada valor x existe un único valor y.  Con una función podemos hacer curvas la que acabamos de hacer, o como estas:

Pues para cada valor x, hay un único valor y.

Ahora veamos estas curvas:

Estas curvas ya no son funciones, pues llega a existir más de un valor y para cada valor x.  Y si te fijas en la figura de la primera página, verás que un B-Spline llega a tener más de un valor y por cada valor x.  Aquí es donde las ecuaciones paramétricas nos son de gran utilidad.  Antes que nada.. ¿qué es una ecuación paramétrica?.  Las ecuaciones paramétricas se dan en pares, una para calcular la coordenada x y otra para calcular la coordenada y.  Las dos ecuaciones toman un solo parámetro t.  Aquí hay un ejemplo de un par de ecuaciones paramétricas:

Con estas ecuaciones se dibuja un círculo cuyo centro está en el origen y que tiene un radio de r.

Una de las ventajas de usar ecuaciones paramétricas es que se pueden trazar cualquier forma, y las dos ecuaciones siguen siendo funciones válidas.

Te estarás preguntando, ¿porqué usar ecuaciones paramétricas, si aún así se puede expresar una curva como la del círculo de la manera ?  Por ejemplo, podríamos usar esto en vez de las 2 ecuaciones paramétricas que acabamos de mostrar:

 

Hay 2 principales razones para no usar esto en vez de ecuaciones paramétricas.  Primero, como para cada x puede hacer mas de una y, sería difícil programar la computadora para que determine cuántas y hay, y que tenga que averiguar como calcular cada una de esas y.

La otra es, por la manera en que las ecuaciones paramétricas determinan una pendiente.

 

Rectas tangentes en ecuaciones paramétricas

Para conocer la pendiente de la línea o curva que definen un par de ecuaciones paramétricas, tenemos que usar algo de matemáticas.

Vamos a suponer que tenemos dos ecuaciones paramétricas: las cuales representan la misma curva que .

La función g(t) nos da una coordenada y al igual k(x).  Y k(x) requiere una x, la cual podemos obtener con f(t).

Entonces podemos establecer que:

Para encontrar la tangente, tenemos que derivar, y para derivar esto, aplicamos la regla de la cadena:

Despejamos k’(x) y obtenemos que:

 siempre que

 

El problema de la dirección de una recta tangente

Si observamos cuidadosamente la curva B-Spline, notaremos que las rectas formadas entre sus puntos de inicio y final con los puntos control no son simplemente tangentes a la curva en su punto de inicio y en su punto final.  Veamos de nuevo la curva:

 

En el punto P0, la curva tiene como tangente a la recta que va de P0 a P1, pero la curva tiene una dirección, podríamos decir que la curva “sale hacia P1”.  Al igual sucede en P3, la curva tiene como tangente a la recta que va de P2 a P3, y lleva una dirección “hacia P3”.

Esto de la dirección es muy importante.  La pendiente por sí sola sólo nos dice cual es el grado de inclinación, pero no nos dice su dirección.

Por ejemplo, aquí hay una recta cuya pendiente es 2:

Nosotros sabemos que la pendiente se calcula dividiendo la y entre la x, para poder así encontrar una relación, esta relación es la pendiente m:

Si nosotros conocemos la parte y y la parte x con la cual se obtiene la pendiente, entonces podemos saber cual es la dirección de la recta que tiene esa pendiente, si por ejemplo:

 

 

 

Entonces la recta tendría esta dirección:

Pero si:

Entonces la recta sería así:

La inclinación es la misma, pues , pero la dirección cambia.

Magnitud

Otra dato importante que podemos conocer si tenemos por separado la x y la y que con que se obtiene la pendiente, es la magnitud de la recta, al tener magnitud y dirección, entonces ya estamos hablando de un vector.

Por ejemplo, si:

, tendríamos un vector así:

Pero si  entonces tendríamos un vector así:

La pendiente es la misma, lo que cambia es la magnitud y la dirección, los cuales son datos muy importantes para nuestra curva B-Spline.

Veamos nuevamente la forma de calcular la tangente usando ecuaciones paramétricas:

Aquí vemos que g’(t) viene siendo nuestra componente y, y f’(t) es nuestra componente x.  Así que con ecuaciones paramétricas podemos determinar no sólo la pendiente (grado de inclinación) de la recta tangente, sino también su magnitud y dirección!

 

La curva B-Spline de un solo punto control.

Antes de intentar hacer ya directamente la fórmula de la curva B-Spline con sus 2 puntos control, vamos a hacer una curva parecida utilizando sólo un punto control.

 

Aquí está la curva que vamos a intentar hacer:

Como vemos aquí, vamos a encontrar una ecuación que nos dé una curva que empiece en el punto P0 y que en ese mismo punto tenga una pendiente de , y que termine en el punto P3.

 

El rango de t

Te habrás dado cuenta que las ecuaciones paramétricas toman un parámetro t, o sea que t es nuestra única variable independiente.  Teniendo un valor t podemos obtener la x y la y correspondientes, usando las 2 ecuaciones paramétricas.  La pregunta es, ¿qué valor le asignamos a t? ¿qué rango de valores puede tomar t?

El significado de t depende mucho de cómo estén formadas las ecuaciones paramétricas, por ejemplo, en la forma paramétrica del círculo, la t es un ángulo.

A veces t puede ser cualquier valor; como apenas vamos a definir un par de ecuaciones paramétricas, podemos simplemente establecer el rango que queramos.  Así que vamos a establecer que el rango de t es de 0 a 1, matemáticamente hablando:

Con esto queremos decir que cuando t = 0, las ecuaciones paramétricas nos van a dar el punto (x0, y0), y que cuando t = 1, entonces las ecuaciones paramétricas nos darán el punto (x3, y3).  En otras palabras, la curva se dibuja cuando los valores de t van del 0 al 1.

No voy a tratar de explicar por que utilizamos el rango [0, 1] como dominio de nuestras 2 funciones paramétricas, pudimos haber utilizado cualquier otro rango, pero a mi simplemente se me hacen el 0 y el 1 valores muy fáciles de manejar al estar simplificando las fórmulas.  ¿Para qué nos complicamos la vida definiendo un rango de [4.63, 32.567]?, sería una lata andar haciendo operaciones con esos valores.

 

Deduciendo la ecuación de la curva que tiene un punto control

Vamos a deducir un par de ecuaciones  que definan la curva que acabamos de poner al principio de esta página.

Empecemos por listar concretamente las características que debe cumplir esta curva:

La pendiente inicial será de e irá cambiando de tal manera que la curva llegue a pasar por el punto (x3, y3).

 

La pendiente de la pendiente

La pendiente de nuestra curva va a ir cambiando, es decir, va a tener una razón de cambio, esa razón de cambio es la pendiente de la pendiente.  La pendiente de la pendiente es lo que obtiene con la segunda derivada, obviamente.

 

Vamos a definir:

        siendo m la “pendiente” de la curva

       siendo p la “razón de cambio” de m.

 

Nosotros sabemos que cuando t = 0, entonces m = x1 – x0.

Aquí podemos definir un punto: (0, x1 – x0).  Considerando que p es una pendiente, entonces podemos definir una ecuación para m, utilizando la formula de la línea recta que se obtiene con un punto y una pendiente.  La ecuación de la línea recta usando un punto-pendiente es la siguiente:

En nuestro caso, la variable dependiente y viene siendo m,  p es la pendiente (m en la fórmula original), x es la variable independiente, o sea t, x1 y y1 definen el punto que conocemos, en este caso: (t = 0, m = x1 – x0).

Al sustituir los valores que queremos utilizar quedaría así:

Si quisiéramos conocer f(t) solo tenemos que integrar:

Como el valor inicial de f es x0, o sea, f(0) = x0, entonces C = x0 y la fórmula queda finalmente así:

Pero, ¿cuándo vale p?, pues a eso vamos precisamente, a despejar p:

Ahora es el momento de usar otra característica de nuestra curva:

Si sustituimos nos queda:

Ahora sí, por fin sabemos cuanto vale p.

Tomemos en cuenta que si:

Entonces:

Pero mejor hay que hacerlo por pasos:

Así que primero hay que obtener m:

Como dijimos, C es cuanto vale m cuando t = 0:

Ahora tenemos que sacar f(t):

En este caso, C es cuanto vale f(0), y eso, según las características que listamos al principio:

 

Por lo tanto:

Las características para la función g(t) son exactamente iguales a la función f(t), lo único que cambia es que g(t) es para la coordenada Y.  Por lo tanto función g(t) quedaría así:

 

Ahora sí, cuando usemos estas funciones para t con valores del 0 al 1, obtendremos la curva B-Spline de un solo punto control que se presentó anteriormente.  Recuerda que la función f(t) calcula la coordenada X, y la función g(t) calcula la coordenada Y.

 

Primer intento de deducir la fórmula del B-Spline de 2 puntos control

 

Veamos nuevamente el B-Spline del cual queremos encontrar la fórmula:

 

A diferencia del Spline del cual obtuvimos la fórmula anteriormente, aquí tenemos un segundo punto control.  Eso significa que nosotros estamos especificando en donde queremos que empiece la curva, en donde queremos que termine la curva, y cual será la pendiente en cada uno de esos 2 puntos, no sólo en uno de ellos.

 

Vamos a utilizar nuevamente un rango para t de 0 a 1.  Tomando esto en cuenta, trataremos de listar aquellas características o condiciones que deben cumplir las ecuaciones paramétricas de esta curva:

 

 

Las características de g(t) son las mismas que f(t), sólo cambia la coordenada a la que se refieren.  Así que solo tenemos que encontrar la fórmula de una de las funciones y la utilizamos para la otra función (sustituyendo la coordenada correspondiente).

 

Concavidad hacia arriba, concavidad hacia abajo y puntos de inflexión

Al deducir la fórmula del Spline de un solo punto control, estábamos considerando a p una constante.  De hecho, si p no hubiera sido una constante, no hubiéramos podido integrarla y obtener la fórmula final.  Nosotros dijimos que p = f’’(t), eso significa que p es la segunda derivada de la función paramétrica.  Ahora, hay algo importante que notar cuando decimos que la segunda derivada de nuestra función es una constante.

 

Examinemos la siguientes curvas:

Las líneas verdes son las rectas tangentes de la curva en diferentes puntos, conforme la curva avanza, estas tangentes aumentan de valor, en otra palabra podría decirse, que “van girando hacia la izquierda”, aunque el aumento de la pendiente tiene sus limitaciones, por ejemplo, en las 2 curvas que se muestran arriba, la tangente seguirá aumentando, pero por más que aumente, nunca llegará ni pasará de los 90°, de hecho, la tangente de 90° es infinito.  Cuando la tangente va en aumento, se dice que la función tiene concavidad hacia arriba.  Si decimos que hay concavidad hacia arriba cuando la pendiente va en aumento, entonces, la razón de cambio de la pendiente debe ser positiva, matemáticamente hablando:

Si la función de estas curvas es f y la posición x donde la curva debe ser cóncava hacia arriba es c, entonces:

 

Ahora examinemos las siguientes curvas:

 

Aquí cambió la cosa, ahora la recta tangente está “girando hacia la derecha”, eso significa que la pendiente va disminuyendo.  Entonces decimos que estas curvas son “cóncavas hacia abajo”.  Por lo tanto, si la pendiente va disminuyendo, entonces la razón de cambio de la pendiente debe ser negativa:

En cualquiera de los dos casos anteriores, el de concavidad hacia arriba y del de concavidad hacia abajo, la segunda derivada de f puede ser un valor constante.  Pero ahora examinemos la siguiente curva:

Es la misma curva B-Spline que ya llevo como 4 veces que la repito, pero aquí marqué un punto especial, un punto de inflexión.  El punto de inflexión es donde la pendiente cambia de dirección.  En el caso de arriba, la pendiente deja de disminuir y empieza a aumentar.

Aunque no todas la curvas B-Spline tengan un punto de inflexión, es importante tomar en cuenta las consecuencias de que pueda existir este punto de inflexión.

 

En el punto de inflexión de esta curva B-Spline, la pendiente va a dejar de disminuir para empezar aumentar, eso significa que la razón de cambio de la pendiente, o sea, la segunda derivada de la función de esta curva, va a cambiar de signo, de negativo, a positivo, por lo tanto la razón de cambio de la pendiente (a la cual hemos estado llamando p), no puede ser una constante.

 

La pendiente de la pendiente de la pendiente

Cuando algo no es constante, es porque tiene una razón de cambio, o una pendiente.  Si acabamos de confirmar que la f’’(t) y g’’(t) no son constantes, pues en cierto momento pasan de un valor positivo a un valor negativo, por lo tanto deben tener alguna razón de cambio que los haga cambiar, valga la redundancia, eso vendría siendo la pendiente de la pendiente de la pendiente, para simplificarnos la cosa, vamos a llamarle s.

 

 

Ahora sí, podemos empezar a deducir las ecuaciones paramétricas del B-Spline.  Agárrense por que aquí viene lo bueno.  Aquí van de nuevo las condiciones que deben reunir nuestras ecuaciones paramétricas:

Nosotros no tenemos idea de cuanto vale s, entonces tenemos que encontrar su valor.  Primero, empecemos por definir p:

Ahora tenemos a p en términos de s, pero ahora tenemos una C que nos está dando lata, y tampoco sabemos cuanto vale.  Aún así, podemos integrar de nuevo para encontrar m:

Cuidado con la C, esa C es la que obtuvimos originalmente al integrar p, también hay que notar que agregué directamente el x1 + x0 (pues f’(0) = x1 + x0 )  en lugar de poner otra C, para que no se confundiera con la C que ya estaba ahí.

Ahora hay que integrar m para obtener f(t), aquí voy a agregar el x0 (pues f(0) = x0 ) directamente en lugar de poner otra C.

Ahora tomemos la siguiente característica para formular una ecuación:

Como m = f’(t), entonces podemos tomamos la fórmula de m para establecer que:

Tomemos también en cuenta la siguiente característica:

Si sustituimos en la fórmula obtenida para f(t), entonces tenemos que:

Las últimas 2 ecuaciones que acabamos de hacer, forman un sistema de ecuaciones, si las resolvemos, podremos conocer el valor de s y el valor de C.  Aquí esta nuestro sistema de ecuaciones:

 

Empecemos por despejar C en la 1:

Ahora sustituimos en la 2:

multiplicamos todo por 12:

Ahora hay que obtener C:

Ahora que tenemos a s y a C en términos de los puntos que definen la curva, podemos integrar hasta obtener f(t).

Primero tenemos que obtener p:

Esa C es precisamente la que acabamos de despejar, así que sustituimos la C y nos queda:

Ahora hay que obtener m (la pendiente, o sea f’(t)), ya sabemos que al integrar, le agregamos al final la pendiente inicial que es:

Ahora sí, a integrar para obtener m:

Finalmente integramos m para obtener f(t):

Podemos simplificar:

Igualmente definimos a g(t):

 

 

 

 

El problema de la fuerza de atracción de los puntos control

 

Veamos las fórmulas obtenidas para nuestra curva B-Spline:

 

Ahora veamos las condiciones que definimos que debían tener estas fórmulas:

 

Si nos ponemos a comprobarlas nos daremos cuenta de que efectivamente las ecuaciones que obtuvimos cumplen con estas condiciones.  Pero, sucede que al utilizar estas fórmulas para crear una curva B-Spline, la curva se ve así:

 

Esta curva es efectivamente un B-Spline del tipo que queríamos obtener, pero si la comparamos con el B-Spline que aparece en la primera página, nos daremos cuenta de que algo anda mal.  Sucede que a los puntos control, les falta algo de fuerza de atracción, la curva debería verse más “atraída” hacia los puntos control.

 

Para solucionar esto, tenemos que analizar que es lo que hace que la curva se vea atraída hacia los puntos control.  Hay dos características que establecimos que debían tener cada una de las ecuaciones paramétricas de nuestra curva:

          

 

Al estar nosotros especificando la derivada de f y la derivada de g, estamos estableciendo no sólo una pendiente, sino una dirección y una magnitud.  Esto de la magnitud es muy importante, pues es la que determina que tanto se va a ser atraía la curva.

 

Si nosotros no estuviéramos utilizando ecuaciones paramétricas, daría igual si establecemos que en un punto debe haber una pendiente de  a que estableciéramos una de , pero como estamos utilizando ecuaciones paramétricas, cada elemento de la fracción es la derivada de una de las ecuaciones; el numerador es la derivada de la función g(t) y el denominador es la derivada de f(t), esto nos permite establecer una magnitud.

 

Ahora bien, esto significa que si queremos que los puntos control atraigan mas a la curva, debemos aumentar los valores que establecimos para f’(0), f’(1), g’(0) y g’(1).  A mí se me ocurrió triplicar el valor original, de manera que:

           

 

En este momento te has de estar preguntando ¿y a este tipo que le pasa? ¿qué es eso de “se me ocurrió”? ¿y por que lo multiplica por 3, por que no por 2 o por 4?

Lo que sucede aquí es que el 3 es el número que nos da la curva B-Spline como debe ser, básicamente, aquí solo es cosa de “atinarle”, pudimos haber usado un 2, o un 4, etc.  Pero la curva no nos hubiera quedado como debe ser.  La única explicación que puedo dar aquí es que necesitamos de alguna manera aumentar el valor de las derivadas para lograr una mayor atracción de la curva por parte de los puntos control.  Más adelante daré una pequeña explicación más matemática de porqué se utilizó el 3 (aunque no lo demostraré con fórmulas).

 

Ya que redefinimos las nuevas derivadas, hay que volver a sacar las 2 ecuaciones paramétricas.  Retomemos las fórmulas con que empezamos a deducir la fórmula del B-Spline anterior:

El (x1, x0) tienen que ser reemplazados por la nueva derivada, las fórmulas quedaría así:

Ahora tomando en cuenta la siguiente condición de nuestra curva:

Podemos formular la siguiente ecuación:

Y utilizando esta condición:

Podemos formular esta otra ecuación:

Así tenemos un sistema de ecuaciones:

 

Despejamos C en 1:

Sustituimos C en 2:

Multiplicamos todo por 6:

Pasamos las s a la izquierda:

Multiplicamos todo por 2

Ahora hay que sacar la C:

Ahora sí, ya que tenemos s, podemos ir integrando hasta obtener f(t)

Para poder resolver esto más fácilmente, nos vamos por pasos, primero a sacar p:

Sustituimos la C:

Ahora hay que obtener m:

Lo que agregué en el paréntesis es la pendiente inicial, según la condición

Simplificamos:

Ahora hay que sacar f(t):

El x0 que agregué es la coordenada del punto inicial.

Seguimos simplificando:

Y esta misma fórmula la pasamos a g(t):

Violá!, ya tenemos nuestras 2 fórmulas paramétricas de la curva B-Spline.  Estas son las que producen curvas como la que se muestra en la primera página.  Créeme, si quieres compruébalo tú mismo y verás.

 


La fórmula original de Bézier:

Ok ok, yo sé que me vi muy mal al simplemente multiplicar por 3 las pendientes iniciales y finales sin dar ninguna explicación “matemáticamente rigurosa”, pero en fin, funcionó, y la razón que di fue suficientemente lógica.  Sin embargo, para aquellos que no estén conformes con esto, y que sean unos genios de las matemáticas, aquí les va la fórmula original para una curva Bézier:

      para valores de t del 0 al 1.

La Pi es el punto.  P0 es el punto inicial, y Pn es el punto final, todos los demás puntos entre el 1 y el n-1 son los puntos control.

Ah verdad?, a ver si le entiendes…

Bueno bueno, esa  se refiere al polinomio de Bernstein, y pues sí, aquí va:

Donde  es el coeficiente binomial:

La “!” indica factorial, ya si no sabes que es el factorial, estás muy perdido, ve y búscalo en un libro de matemáticas.

 

Para deducir esta fórmula se utilizaron todos las condiciones que nosotros establecimos para deducir nuestra propia fórmula, sólo que Bézier y Bernstein, utilizaron otra condición que nosotros no especificamos.  Ellos pusieron como condición, que la curva siempre iba a quedar dentro de un convex hull.  El convex hull es un polígono de 4 lados que se forma al unir los puntos control y los puntos inicial y final; la curva siempre quedará dentro de este polígono.

 

Otra característica que se estableció es que ninguna línea puede tener más intersecciones con una curva Bézier que con la curva obtenida al juntar puntos consecutivos con líneas rectas.  Esta característica de la curva indica que la variación de la curva no es mucha.

 

La más importante característica es que se encuentra dentro de un convex hull.  El problema es que los cálculos que se tienen que hacer para definir un convex hull son súper complejos, y muy probablemente hubiéramos tardado más en hacer los cálculos del convex hull que en atinarle al 3 por el cual teníamos que multiplicar las pendientes.  Si hubiéramos usado un número mayor que el 3, no pasa de que la curva se salga de su convex hull.

 

Bueno, de una manera u otra, la fórmula obtenida es la misma.  Para terminar, voy a poner las ecuaciones finales que definen a una curva Bézier de 2 puntos control (un B-Spline):

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *