Dividir la curva de Bezier en dos partes en algún parámetro t
es fácil gracias al algoritmo de De Casteljau .
¿Existe un algoritmo similar para las curvas NURBS? ¿Cómo dividir una curva NURBS?
Dividir la curva de Bezier en dos partes en algún parámetro t
es fácil gracias al algoritmo de De Casteljau .
¿Existe un algoritmo similar para las curvas NURBS? ¿Cómo dividir una curva NURBS?
Respuestas:
La forma en que las curvas NURBS se dividen típicamente en un punto arbitrario es mediante inserción de nudos . Inserta nudos en el punto de división hasta que esté en la multiplicidad máxima, momento en el que puede leer las dos curvas de división.
Sin embargo, es posible que no desee dividir en un punto arbitrario. Si el objetivo final es dibujar las curvas o algo así, entonces vale la pena dividir la curva en los puntos de nudo existentes (es decir, realizar la inserción del nudo hasta que todos los nudos tengan la máxima multiplicidad) en lugar de insertar nuevos.
Este proceso divide las NURBS en splines B racionales uniformes . Una vez que tenga eso, puede usar el algoritmo de de Boor para dividirse aún más.
El número de nudos en el vector de nudo es:
numKnots = degreeOfCurve + numControlPoints + 1
o si lo prefieres:
numKnots = orderOfCurve + numControlPoints
Insertar un nudo aumenta así el número de puntos de control en uno.
A medida que viaja a lo largo de una curva NURBS, cada nudo representa un lugar donde un punto de control "cae" y otro "entra". Si se repite un valor de nudo, esto significa que se reemplaza más de un punto de control en este lugar.
Para una curva de grado mayor que 1, los nudos y los últimos nudos se repiten varias veces por una simple razón: necesita traer más de un punto para comenzar y debe expulsar más de un punto para finalizar.
Pensemos en las curvas cúbicas por el momento, solo para simplificar las cosas.
Una curva con el vector de nudo [0,0,1,1] es una curva B-spline uniforme.
Una curva con el vector de nudo [0,0,1,1,2,2] no es uniforme, pero puede considerarse como dos curvas uniformes B-spline que se conectan en t = 1, una correspondiente a [0,0 , 1,1] y uno correspondiente a [1,1,2,2]. Puede hacer esto porque la multiplicidad de los nudos es suficiente para "comenzar" y "terminar" una curva cúbica.
Si se enfrenta a una curva con un vector de nudo como [0,0,1,2,2], puede insertar un nudo en 1 sin cambiar la forma de la curva (este es el procedimiento de inserción del nudo). Esto aumenta el número de puntos de control en uno; El procedimiento de inserción del nudo ajusta los puntos alrededor del nuevo nudo para acomodarlo. Pero una vez que haya hecho eso, tiene dos curvas uniformes B-spline.
La inserción de nudos no creará puntos de control superpuestos a menos que inserte demasiados nudos en el mismo lugar, y por "demasiados", me refiero al grado de la curva. Entonces, para una curva cúbica no uniforme, insertaría nudos para que cada nudo tuviera multiplicidad 2. Eso le da una cantidad de curvas cúbicas uniformes contiguas, que luego puede usar el algoritmo de De Boor para dividir aún más.