2009-07-06 22 views
13

Desde este sitio que parece tener la información más detallada sobre splines catmull-rom: http://www.mvps.org/directx/articles/catmull/ hace mención de la necesidad de cuatro puntos para crear la spline. Sin embargo, no menciona cómo los puntos p0 y p3 afectan los valores entre p1 y p2.splines Catmull-Rom - ¿cómo funcionan?

Otra pregunta que tengo es ¿cómo crearía splines continuas? Sería tan fácil como definir los puntos p1, p2 para ser continuos con p4, p5 haciendo p4 = p2 (es decir, suponiendo que tenemos p0, p1, p2, p3, p4, p5, p6 ... pN).

Una pregunta más general es cómo se calcularían las tangentes en catmull rom splines? ¿Tendría que implicar tomar dos puntos en la spline (digamos en 0.01, 0.011) y obtener la tangente basada en pythagoras dadas las coordenadas de posición que dan los valores de entrada?

+0

normal Catmull-Rom también es propensa a bucles y auto-intersección que puede ser un problema. Recomiendo utilizar la parametrización centrípeta que se muestra aquí: http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

Respuesta

8

Eche un vistazo a la ecuación 2 - describe cómo los puntos de control afectan la línea. Puede ver los puntos P0 y P3 entrar en la ecuación para trazar puntos a lo largo de la curva desde P1 hasta P1 hasta P2. También verá que la ecuación da P1 cuando t == 0 y P2 cuando t == 1.

Esta ecuación de ejemplo se puede generalizar. Si usted tiene puntos R0, R1, ... RN continuación, puede trazar los puntos entre RK y RK + 1 utilizando la ecuación 2 con P0 = RK - 1, P1 = RK, P2 = RK + 1 y P3 = RK + 2.

No se puede imprimir desde el R0 a R1 o desde RN - 1 a RN a menos que añadir puntos de control adicionales para sustituir a R - 1 y RN + 1. La idea general es que puedes elegir los puntos que quieras agregar a la cabeza y la cola de una secuencia para darte todos los parámetros para calcular la spline.

Puede unir dos splines al soltar uno de los puntos de control entre ellos.Digamos que tiene R0, R1, ..., y RNS0, S1, ... SM que se pueden unir en R0, R1, ..., RN - 1, S1, S2, ... SM.

para calcular la tangente en cualquier punto acaba de tomar la derivada de la ecuación 2.

6

El Wikipedia article entra un poco más en profundidad. La forma general de la spline toma como entrada 2 puntos de control con vectores tangentes asociados. Se pueden agregar segmentos spline adicionales siempre que los vectores tangentes en los puntos de control comunes sean iguales, lo que preserva la continuidad C1.

En la forma específica de Catmull-Rom, el vector tangente en los puntos intermedios está determinado por las ubicaciones de los puntos de control vecinos. Por lo tanto, para crear una spline continua C1 a través de puntos múltiples, es suficiente suministrar el conjunto de puntos de control y los vectores tangentes en el primer y último punto de control. Creo que el comportamiento estándar es usar P1 - P0 para el vector tangente en P0 y PN - PN - 1 en PN.

De acuerdo con el artículo de Wikipedia, para calcular la tangente en el punto de control Pn, se utiliza esta ecuación:

T(n) = (P(n - 1) + P(n + 1))/2 

Esto también responde a la primera pregunta. Para un conjunto de 4 puntos de control, P1, P2, P3, P4, los valores de interpolación entre P2 y P3 requieren información de los 4 puntos de control. P2 y P3 definen ellos mismos los puntos finales a través de los cuales debe pasar el segmento de interpolación. P1 y P3 determinan el vector tangente que el segmento de interpolación tendrá en el punto P2. P4 y P2 determinan el vector tangente que tendrá el segmento en el punto P3. Los vectores tangentes en los puntos de control P2 y P3 influyen en la forma del segmento de interpolación entre ellos.

+1

Lo siento si me estoy perdiendo algo, pero ¿podrías indicar en qué parte del artículo da esa fórmula? Veo uno diferente en http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline. (No soy muy bueno en matemáticas. Solo quería saber cómo conseguiste la fórmula). –