B-Splines y Beziers son invenciones paralelas de más o menos lo mismo. Donde Beziers intenta comenzar con la idea de encajar tangentes. B-Splines comienzan con la idea de funciones básicas. NURB Splines (o la parte racional de hecho) son solo generalizaciones de B-Splines para que pueda describir secciones cónicas precisas *, ya que son de especial interés en ingeniería.
Primero comencemos con una terminología simple de NURB Spline. La lógica de estas curvas es un poco diferente a la de Beziers. Primero está el concepto de un lapso. Un lapso sería aproximadamente equivalente a una spline de Bezier completa, excepto en nurbs que puede tener cualquier número de tramos.
Imagen 1 : Un lapso NURBS cúbico. Esto es un poco atípico en formulación
Cada tramo está formado por el grado de curva + 1 puntos de control **. Cada curva puede constar de cualquier número de puntos. Cada período consecutivo reutiliza los puntos del período anterior al soltar un punto y tomar un punto más en la lista. Entonces, hacer curvas más complejas es tan fácil como simplemente agregar más puntos a la curva.
NOTA : Las curvas de las imágenes están un poco atípicamente parametrizadas, explicaré lo que esto significa en la siguiente sección. Cuando tomo el concepto de nudos. Esta es solo una manera más fácil de explicar cómo se unen las curvas.
Imagen 2 : 2 tramos cúbicos uno tras otro, cada tramo utiliza 4 puntos. juntos forman una curva. Comparten la mayoría de los puntos entre ellos.
A estas alturas probablemente ya hayamos respondido a la pregunta 2 sobre agregar complejidad. Pero me gustaría agregar que este esquema garantiza una mejor continuidad que una curva bezier. Además, puede hacer que la matriz de puntos que forma el casco sea cíclica. Formando una curva cerrada.
Imagen 3 : Una superficie NURBS cúbica cerrada tiene tantos tramos como puntos. Cada color es un lapso.
Parametrización
Hasta este punto, uno podría decir que unir los tramos es un truco como "coser" las curvas de Bezier. Pero hay una diferencia. La curva se parametriza a lo largo de su longitud. Por lo tanto, las curvas no están separadas, no se interpolan de 0 a 1 en cada tramo como lo hacen Beziers. En cambio, la curva subyacente tiene un rango de parámetros personalizables. El parámetro se almacena en algo llamado nudo, y cada nudo puede tener un valor creciente arbitrario en la secuencia. Por lo tanto, puede parametrizar el rango completo de las curvas u de 0 a 1 o de 0 a 12. La parametrización tampoco tiene que ser uniforme.
Esta parametrización cambia la forma de la curva. ¿Por qué sería útil esto? Bueno, puedes ajustar la tensión a lo largo de la curva para uno. O podría codificar la longitud de la curva en el parámetro U. Un uso peculiar es hacer que la curva NURBS actúe como una curva de Bezier, ya sea total o solo parcialmente (como en los extremos pero no en el medio, por ejemplo).
Imagen 4 : Mismos puntos con diferentes secuencias de nudos. La curva verde NURBS corresponde a una curva de Bezier que tiene un rango de parámetros de 0-2 en lugar de 0-1
Ok, entonces, ¿qué son los nudos? Son simplemente los rangos de las funciones básicas. Como la b-spline cúbica con 4 puntos tiene 4 funciones de interpolación, necesita 8 nudos. Solo se pueden dibujar líneas en las áreas donde se superponen 3 funciones y se suman 1.0.
Imagen 5 : 2 funciones básicas diferentes, una parametrización similar a una bezier y una segmentación de segmento uniforme, extendida a un rango de 0-1.
Y ahora hemos descrito principalmente la respuesta a la pregunta 1. El rango no está definido, puede estirar las funciones básicas como mejor le parezca. Y finalmente, el vector de nudo simplemente produce los rangos de parámetros para las funciones básicas. Todavía hay una cosa más que gobierna la forma de la curva y ese es el vector de peso. Pero esa es otra historia que contar en otro lado.
* Este racional en este caso significa que una curva NURBS no tiene que ser un polinomio, ya que no puede describir un círculo con polinomios.
** Se pueden definir otros tipos de puntos.