Fundamentos B-spline racionales no uniformes (NURBS)

9

Estoy tratando de entender las curvas NURBS (¡superficies más tarde!) Pero tengo algunos problemas para entender los conceptos básicos de su funcionamiento interno. ¿Podría alguien explicarme algunas cosas? Como vengo de las curvas de Bezier, una comparación entre estos dos sería especialmente útil.

  1. La "función de base racional" se parece un poco al polinomio de Bernstein de la curva (racional) de Bezier. ¿El parámetro utambién va de 0 a 1?

  2. ¿Cómo "agregar detalles" a una curva? Quiero decir, con Beziers, si necesitaba describir una forma más complicada, simplemente "cosería" varios Beziers juntos. O con menos frecuencia, aumenta el grado. Entiendo que también puedo aumentar el grado de NURBS y poner varias curvas NURBS una al lado de la otra, pero ¿es así como debería hacerse?

  3. El artículo de Wikipedia, al menos para mí, no parece muy claro sobre este "vector de nudo". ¿Qué es de todos modos?

Ecir Hana
fuente
Esto es demasiado para una pregunta. Básicamente puedo reducir mi conferencia introductoria sobre el tema en unas pocas horas. Un poco de detalle en el uso de De casteljanu y el algoritmo de de boor me llevaría demasiado tiempo.
joojaa
1
Por lo tanto, me gustaría ver las preguntas 3, 5 y posiblemente 6 divididas como preguntas separadas para que la respuesta y la comprensión sean más adecuadas para las comidas.
joojaa
@joojaa Claro, puedo dividir la pregunta, solo un segundo ...
Ecir Hana
1
Entonces las preguntas 3 , 5 y 6 se dividieron para separar las preguntas.
Ecir Hana

Respuestas:

7

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.

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

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).

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

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.

joojaa
fuente
con respecto a (*), las curvas de Bezier tienen el mismo problema. El problema es que las curvas (en ambos casos) se definen como x = f (t), y = f (t). Sin embargo, también puede definir una curva univariada / explícita / 1 dimensional (nuevamente, en ambos casos) como y = f (x), utilizando x en lugar de t. En el caso de curvas racionales, en lugar de poder representar secciones cónicas, puede representar seno y coseno (y más, por supuesto). NURBS / b-splines no son especiales en ese sentido.
Alan Wolfe
Creo que su afirmación sobre la longitud es incorrecta (¿solo funciona con funciones lineales?), Y no estoy seguro de cómo se supone que los cálculos de longitud encajan en su explicación (¡buena información que dio, solo diciendo!)
Alan Wolfe
@AlanWolfe eliminado de todos modos
joojaa
¡Más impresionante! Muchas gracias, muy buena explicación!
Ecir Hana
Error tipográfico tal vez? "En cambio, la superficie subyacente tiene un rango de parámetros personalizable. El parámetro se almacena en algo llamado nudo, y cada nudo puede tener un valor arbitrario que es más grande que el siguiente". -> "En cambio, la curva subyacente tiene un rango de parámetros personalizable. El parámetro se almacena en algo llamado nudo, y cada nudo puede tener un valor arbitrario que es más grande que el anterior ". Por cierto, ¿podría aclarar qué quiere decir con "rango UV"? "UV" implica 2D ..?
Ecir Hana