Buscar en este blog

lunes, 13 de junio de 2011

Splines (4ª parte)

En esta cuarta entrega de nuestra serie dedicada a las curvas B-splines explicaremos las dos opciones que proporciona el comando SPLINE para controlar la forma de la curva cuando ésta se dibuja precisando sus puntos de ajuste (Método=Ajustar). La primera de estas dos opciones, toLerancia (toLerance), es relativamente sencilla de entender y está presente en todas las versiones de AutoCAD. No sucede lo mismo con la segunda opción, Nudos (Knots), que fue introducida como novedad en la versión 2011 y no resulta fácil de explicar sin abordar, al menos superficialmente, algunas cuestiones relativas al fundamento matemático de este tipo de curvas. Terminaremos el artículo exponiendo algunas conclusiones que permitan aprovechar, con criterios técnicos, las posibilidades que ofrece esta segunda opción.


La opción toLerancia (toLerance)

Cuando se aplica el comando SPLINE especificando los puntos de ajuste (Método=Ajustar), la curva resultante siempre pasa exactamente por dichos puntos, tal y como pudimos comprobar en la curva de ejemplo que dibujamos en la entrega anterior de esta serie. No obstante, es posible establecer una tolerancia de ajuste de modo que la curva no pase por los puntos sino que se mantenga a una cierta distancia de ellos.

Para conseguir este propósito es necesario seleccionar la opción toLerancia (toLerance) y precisar un valor mayor que cero como respuesta a la solicitud de AutoCAD:

Precise tolerancia de ajuste <0.0000>:

La tolerancia de ajuste tiene la misma influencia en todos los puntos de paso de la curva salvo en los extremos, donde no produce ningún efecto. Si durante el trazado se establecen valores de tolerancia diferentes, sólo se considera el último valor precisado.
La figura siguiente muestra el resultado obtenido al aplicar distintos valores de tolerancia a la curva que dibujamos en la entrega anterior. Es importante señalar que no existe una proporcionalidad directa entre el valor de la tolerancia y la distancia entre la curva y sus puntos de paso; el hecho de doblar el valor de la tolerancia no significa, como se aprecia en la figura, que se doble la distancia entre la curva y cada uno de sus puntos de paso.

La opción Nudos (Knots)

Para comprender mínimamente las posibilidades que ofrece esta opción, cuyo nombre correcto debería ser Nodos en lugar de Nudos, tenemos que recordar algunos conceptos que explicamos en las entregas anteriores de esta serie y que resumimos a continuación.
  • Las curvas B-splines se definen en función de un parámetro global t, cuyos valores determinan los intervalos de variación del parámetro local u en cada tramo de la curva. Este parámetro global recibe el nombre de vector nodal o vector de nodos.
  • El número de elementos del vector de nodos es igual a la suma del número de vértices del polígono de control más el orden de la curva. Los elementos del vector de nodos son números enteros o reales y cada uno de ellos debe ser igual o menor que el siguiente. El valor mínimo siempre es 0.
  • Los vectores de nodos estándar tienen sus n primeros elementos iguales a 0, siendo n el orden de la curva, y los n últimos iguales al valor máximo.
  • Todas las curvas que dibuja el comando SPLINE mediante el método Ajustar (Fit) son cúbicas, es decir, son de orden 4.
El criterio que determina cuál es el valor máximo del vector de nodos y cuáles son los valores de sus elementos intermedios se denomina soporte de interpolación. Las tres posibilidades que ofrece la opción Nudos (Knots) del comando SPLINE se corresponden con los tres métodos más empleados en la práctica para calcular el soporte de interpolación de una curva B-spline: Uniforme (Uniform), basado en la longitud de la Cuerda (Chord) y basado en la raíz cuaDrada (Square root) de la longitud de la cuerda.

El soporte de interpolación también se puede definir mediante la variable de sistema SPLKNOTS. El valor 0, que es su valor por defecto, determina el soporte basado en la longitud de la cuerda, el valor 1 el soporte basado en la raíz cuadrada de la longitud de la cuerda y el valor 2 el soporte uniforme. Al salir de AutoCAD no se guarda el valor de esta variable, por lo que siempre vale 0 cuando se inicia el programa.

Veamos ahora con detalle las características de cada uno de los soportes de interpolación y el efecto que tienen en la forma final de la curva.


Subopción Cuerda (Chord)

El soporte de interpolación basado en la longitud de la cuerda es el más utilizado para la representación de curvas B-spline. De hecho, es el que emplea el comando SPLINE en todas las versiones de AutoCAD anteriores a la 2011, en las que no existe la posibilidad de elegir un soporte diferente.

Su principal característica es que recoge en cierta medida la geometría de los puntos de ajuste, haciendo que los incrementos del parámetro global t sean proporcionales a las longitudes de los segmentos definidos por los puntos de ajuste (cuerdas).

Para aclarar un poco esta cuestión, que no es sencilla, ni mucho menos, vamos a hacer un ejemplo práctico dibujando una misma curva, con los diferentes soportes de interpolación, de modo que nos permita apreciar sus diferencias gráficas. Además, para cada curva calcularemos su correspondiente vector de nodos, tratando de dar sentido a la información proporcionada por el comando LIST para cada una de ellas.

Comenzaremos dibujando una primera curva utilizando el soporte de interpolación basado en la longitud de la cuerda, que es la opción por defecto que emplea el comando SPLINE.
  1. Inicie AutoCAD con un dibujo nuevo.
  2. En la ficha Inicio de la cinta de opciones, expanda el grupo Utilidades y pulse el icono Tipo de punto (comando DDPTYPE) para abrir el cuadro de diálogo Estilo de punto. Seleccione uno cualquiera de los iconos de la segunda fila, asegúrese de que esté seleccionada la opción Establecer tamaño relativo a pantalla y cierre el cuadro de diálogo pulsando el botón Aceptar.
  3. A continuación, expanda el grupo Dibujo, en la ficha Inicio de la cinta de opciones, pulse el icono Varios puntos e introduzca las coordenadas que se indican en la siguiente secuencia:

    Precise un punto: 20,10
    Precise un punto: @10<0
    Precise un punto: @20<65
    Precise un punto: @15<45
    Precise un punto: @20<335
    Precise un punto: @15<225
    Precise un punto: (Esc)
Observe que al utilizar coordenadas polares relativas para precisar todos los puntos salvo el primero, estamos indicando expresamente las distancias entre ellos. La distancia entre el primer punto y el segundo es de 10 unidades de dibujo, entre el segundo y el tercero es de 20, entre el tercero y el cuarto es de 15, etc. Así evitaremos tener que obtener después esas distancias (longitudes de cuerdas) y ahorraremos algunas operaciones intermedias.
  1. Ahora, sitúe el puntero del ratón sobre el botón REFENT (Referencia a objetos) de la barra de estado y seleccione (o compruebe que esté seleccionada) la opción Punto en el menú contextual. De este modo, podremos señalar directamente en la pantalla los puntos de paso de las curvas y no tendremos que escribir sus coordenadas.
Después de efectuar estas operaciones preliminares, podemos dibujar la primera curva empleando el soporte de interpolación basado en la longitud de la cuerda.
  1. Expanda el grupo Dibujo de la ficha Inicio de la cinta de opciones y pulse el icono Spline. Asegúrese de que los parámetros actuales sean Método=Ajustar y Nudos=Cuerda, señale los puntos que tenemos en pantalla siguiendo el mismo orden que empleamos para dibujarlos y pulse Intro para terminar el comando.
Al completar la operación habrá obtenido una curva B-spline como la mostrada en la figura siguiente, donde hemos nombrado cada uno de los puntos para poder referirnos a ellos.
  1. Finalmente, pulse el icono Lista (comando LIST) del grupo Propiedades en la ficha Inicio de la cinta de opciones, designe la curva y pulse Intro. AutoCAD abrirá la ventana de texto y mostrará la información correspondiente a la curva, de la que nos interesan solamente los siguientes tres datos:

    Grado: 4
    Rango de parámetros: Inicio 0.00 Fin 80.00
    Número de puntos de apoyo: 8
Esta información significa que la curva es de orden 4 (cúbica), que el vector de nodos tiene un valor mínimo de 0 y un valor máximo de 80 y que el polígono de control tiene 8 vértices. Con estos datos podemos deducir que el vector de nodos que AutoCAD ha establecido tiene 12 elementos (la suma del orden más el número de vértices del polígono de control), cuyos 4 primeros elementos valen 0 y los 4 últimos 80. Así pues, el vector de nodos es:
t = { 0, 0, 0, 0, V5, V6, V7, V8, 80, 80, 80, 80 }
El valor máximo y los valores intermedios del polígono de control se determinan en función del soporte de interpolación empleado para dibujar la curva, que en este caso es el basado en la longitud de la cuerda (Nudos=Cuerda). Por esta razón, el valor máximo es de 80, que es la suma de las longitudes de los segmentos (cuerdas) definidos por los puntos de ajuste:
P1P2 + P2P3 + P3P4 + P4P5 + P5P6 = 10 + 20 + 15 + 20 + 15 = 80
Los valores de los elementos intermedios del vector de nodos son proporcionales a las longitudes de las cuerdas:
V5 = P1P2 = 10
V6 = P1P2 + P2P3 = 10 + 20 = 30
V7 = P1P2 + P2P3 + P3P4 = 10 + 20 + 15 = 45
V8 = P1P2 + P2P3 + P3P4 + P4P5 = 10 + 20 + 15 + 20 = 65
En consecuencia, el vector de nodos completo de la curva que acabamos de dibujar es:
t = { 0, 0, 0, 0, 10, 30, 45, 65, 80, 80, 80, 80 }

Subopción raíz cuaDrada (Square root)

El soporte de interpolación basado en la raíz cuadrada de la longitud de la cuerda se conoce generalmente como soporte centripetal. Es similar al anterior, pero se fundamenta en principios físicos, considerando que el parámetro es el tiempo y que la curva debe optimizar la fuerza centrípeta a la que es sometido un móvil que se desplaza por ella para que la trayectoria tienda a no alejarse mucho del segmento definido por cada dos puntos de ajuste consecutivos. Los nodos se calculan de modo que los cuadrados de los incrementos sean proporcionales a las longitudes de los segmentos.

Veamos el aspecto que tiene la curva cuando pasa por los puntos de ajuste que tenemos en pantalla y emplea el soporte de interpolación basado en la raíz cuadrada de la longitud de la cuerda. Igual que en el caso anterior, después de dibujar la curva, aplicaremos sobre ella el comando LIST y hallaremos su vector de nodos.
  1. Cambie el color actual de modo que la nueva curva se diferencie claramente de la anterior.
  2. Inicie nuevamente el comando SPLINE, seleccione la opción Nudos (Knots) y la subopción raíz cuaDrada (Square root). Después, señale los puntos que tenemos en pantalla siguiendo el mismo orden que en la operación anterior y pulse Intro para terminar el comando.
La figura siguiente muestra, en color azul, el aspecto de esta nueva curva.
  1. Inicie el comando LIST, designe la curva y pulse Intro. La información sobre el grado (4) y el número de puntos de apoyo (8) será la misma que en la curva anterior, pero no ocurre lo mismo con el rango de parámetros, que en este caso tiene los siguientes valores:

    Rango de parámetros: Inicio 0.00 Fin 19.85
El vector de nodos de la curva, de acuerdo con estos datos, es:
t = { 0, 0, 0, 0, V5, V6, V7, V8, 19.85, 19.85, 19.85, 19.85 }
El valor máximo de 19.85 es la suma de las raíces cuadradas de las longitudes (cuerdas) de los segmentos definidos por los puntos de ajuste:
Los valores de los elementos intermedios del vector de nodos son proporcionales a las raíces cuadradas de las longitudes de las cuerdas:
Y el vector de nodos completo de la curva que acabamos de dibujar es:
t = { 0, 0, 0, 0, 3.16, 7.63, 11.51, 15.98, 19.85, 19.85, 19.85, 19.85 }

Subopción Uniforme (Uniform)

El soporte uniforme es el más sencillo de los tres. Consiste en una partición regular del intervalo de variación del parámetro y no depende de los puntos a interpolar. Tiene la ventaja de que todos los cálculos se simplifican al máximo, pero presenta un serio inconveniente y es que incrementos iguales en el parámetro producen variaciones notables a lo largo de la curva.

Como en los casos anteriores, veamos el aspecto que tiene nuestra curva cuando emplea el soporte uniforme de interpolación.
  1. Vuelva a cambiar el color actual para poder distinguir la nueva curva de las otras dos que ya tenemos dibujadas.
  2. Inicie por tercera vez el comando SPLINE, seleccione la opción Nudos (Knots) y la subopción Uniforme (Uniform). Señale los puntos que tenemos en pantalla siguiendo el mismo orden que en las operaciones anteriores y pulse Intro para terminar el comando.
La figura siguiente muestra, en color gris, el aspecto de esta tercera curva.
  1. Inicie el comando LIST, designe la curva y pulse Intro. El grado (4) y el número de puntos de apoyo (8) serán los mismos que en las otras dos curvas, pero no así el valor máximo del rango de parámetros:

    Rango de parámetros: Inicio 0.00 Fin 5.00
En este caso, el vector de nodos cumple con los estándares de normalización establecidos para las curvas B-splines donde el valor máximo es igual al número de vértices del polígono de control (8) menos el orden de la curva (4) más 1, y los elementos intermedios están equiespaciados en una unidad. Así pues, el vector de nodos de nuestra curva cuando emplea el soporte uniforme de interpolación es:
t = { 0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 5, 5 }

Conclusiones

Por lo general, como puede apreciarse en la última figura, los mejores resultados se obtienen con el soporte basado en la raíz cuadrada de la longitud de la cuerda, pero su coste, en términos de necesidades de cálculo, es el más elevado de los tres. En consecuencia, el soporte de interpolación que mejor compensa los resultados con las necesidades de cálculo es el que está basado en la longitud de la cuerda. Por esta razón, la parametrización Nudos=Cuerda es la que propone por defecto el comando SPLINE.

Para terminar, una cuestión que conviene conocer: cuando se especifican las direcciones de las tangentes en los dos extremos de la curva, la opción Nudos (Knots) no tiene ningún efecto y la curva resultante es exactamente la misma con independencia del soporte de interpolación elegido.


Ir a 3ª parte ...

0 comentarios: