Sunday, December 16, 2007

Trazo de splines

Trazo de splines

• Interpolar un conjunto de puntos usando los splines cubicos naturales.
• Interpolar un conjunto de puntos de una curva cerrada usando los mismos splines cubicos naturales.
• Interpolar el mismo conjunto de puntos del primer punto pero ahora usando los splines Catmull-Rom.
• El trazo debe realizase con gnuplot

Jose Angel Espinoza Portillo, onlyangel@onlyangel.net

Splines Cubicas Naturales

1 Teorıa
Fue una de las primeras curvas splines que se desarrollo para aplicaciones gr´aficas es el spline cubico natural. Esta se forma imponiendo que dos partes adyacentes e la curva posean la mismas primera y segunda derivada parametrica en su limite comun. Por tanto, los splines cubicos naturales tienen continuidad C 2 .




Si tenemos n + 1puntos de control, como en la Figura 1.1, entonces tenemos n partes de la curva con un total de 4n coeficientes de polinomio que hay que determinar. En cada uno de los n − 1 puntos de control interiores tenemos cuatro condiciones en el limite: las dos partes de la curva a cada lado de un punto de control deben tenerlas mismas primera y segunda derivadas parametricas en dicho punto de control, y cada curva debe pasar por ese punto de control. Esto nos proporciona 4n − 4 ecuaciones que hay que satisfacer con 4n coeficientes de polinomio, obtenemos una ecuaci´on adicional a partir del primer punto de control p0 y pn en el valor 0. Otra t´ecnica es anadir dos puntos de control extra (llamados puntos ficticios ), uno en cada extremo de la secuencia original de puntos de control. Es decir anadimos un punto de control etiquetado como p en el comienzo de la curva y un punto decontrol etiquetado como pn+1 en el final. Entonces todos los puntos e control originales son puntos anteriores y tenemos las 4n condiciones necesarias en el limite.

2 Base matematica del dibujo
Si tenemos una secuencia de puntos P = {P0 , P1 , · · · , Pn } donde cada Pa es un punto en el espacio (xa , ya ). Se tiene que desarrollar la siguiente Multiplicaci´on de matrices.



De esta manera se tienen todas las secciones de la curva a dibujar, la cual para ser rendereada por puntos se especifican segun la siguiente ecuaci´on basada en t.




3 Interpolando un Conjunto de Puntos
3.1 Se propone el siguiente P.




3.2 Se tendr´an unos M de:




3.3 Con lo que nos queda.


3.4 C´odigo de gluplot

X1(t) = 2*(1-t) + 4*t + (-30/6)*( (1-t)*(1-t)*(1-t) - (1-t) ) + (30/6)*( t*t*t - t )
Y1(t) = 3*(1-t) + 8*t + (30/6)*( (1-t)*(1-t)*(1-t) - (1-t) ) + (-30/6)*( t*t*t - t )
X2(t) = 4*(1-t) + 6*t + (-30/6)*( (1-t)*(1-t)*(1-t) - (1-t) ) + (30/6)*( t*t*t - t )
Y2(t) = 8*(1-t) + 3*t + (-30/6)*( (1-t)*(1-t)*(1-t) - (1-t) ) + (30/6)*( t*t*t - t )
X3(t) = 6*(1-t) + 8*t + (-30/6)*( (1-t)*(1-t)*(1-t)-(1-t) ) + (30/6)*( t*t*t - t)
Y3(t) = 3*(1-t) + 8*t + (30/6)*( (1-t)*(1-t)*(1-t)-(1-t) ) + (-30/6)*( t*t*t - t)
set xrange [0:10]
set yrange [0:10]
set multiplot
plot ’puntosNaturales.txt’ w p ps 2
set parametric
set trange [0:1]
plot X1(t),Y1(t), X2(t),Y2(t),X3(t),Y3(t)
unset multiplot
pause -1



3.5 Resultado



4 El caso del la figura circular
4.1 Se propone el siguiente P.




4.2 Se tendr´an unos M de:




4.3 Con lo que nos queda.



4.4 Codigo en GNUPLOT


X1(t) = 4*(1-t)+3*t + ((-11.81041)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((8.33644)/6)*(t*t*t-t)
Y1(t) = 4*(1-t)+0*t + ((-12.21815)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((0.76353)/6)*(t*t*t-t)
X2(t) = 3*(1-t)+4*t + ((8.33644)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((-9.53533)/6)*(t*t*t-t)
Y2(t) = 0*(1-t)-4*t + ((0.76353)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((9.16403)/6)*(t*t*t-t)
X3(t) = 4*(1-t)+0*t + ((-9.53533)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((-0.19511)/6)*(t*t*t-t)
Y3(t) = -4*(1-t)-3*t + ((9.16403)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + (( -7.41963)/6)*(t*t*t-t)
X4(t) = 0*(1-t)-4*t + ((-0.19511)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((10.31579)/6)*(t*t*t-t)
Y4(t) = -3*(1-t)-4*t + (( -7.41963)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((8.51451)/6)*(t*t*t-t)
X5(t) = -4*(1-t)-3*t + ((10.31579)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((-11.06804)/6)*(t*t*t-t)
Y5(t) = -4*(1-t)+0*t + ((8.51451)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((3.36161)/6)*(t*t*t-t)
X6(t) = -3*(1-t)-4*t + ((-11.06804)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((21.95635)/6)*(t*t*t-t)
Y6(t) = 0*(1-t)+4*t + ((-3.36161)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((-21.96094)/6)*(t*t*t-t)
X7(t) = -4*(1-t)+0*t + ((21.95635)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((-2.84467)/6)*(t*t*t-t)
Y7(t) = 4*(1-t)+3*t + ((-21.96094)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((10.56027)/6)*(t*t*t-t)
X8(t) = 0*(1-t)+4*t + ((-2.84467)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((10.57766)/6)*(t*t*t-t)
Y8(t) = 3*(1-t)+4*t + ((10.56027)/6)*((1-t)*(1-t)*(1-t)-(1-t)) + ((-8.28013)/6)*(t*t*t-t)
set xrange [-7:7]
set yrange [-7:7]
set multiplot
plot ’puntosNaturalesCirculo.txt’ w p ps 2
set parametric
set trange [0:1]
plot X1(t),Y1(t), X2(t),Y2(t),X3(t),Y3(t), X4(t),Y4(t),X5(t),Y5(t), X6(t),Y6(t),X7(t),Y7(t),X8(t),Y8(
unset multiplot
pause -1


4.5 Resultado



Splines de Catmull-Rom
1 Teor´ıa y base matematica
Al igual que los splines de Hermite, los splines Catmull-Rom son polinomio de interpolaci´on por tramos c´ubicos con tangentes especificas en los puntos extremos en los limites de cada secci´on de la curva. La diferencia es que no introducimos los valores de las tangentes en los puntos extremos. En un spline CR, la pendiente en en el punto de control se calcula a partir de las coordenadas de los dos puntos de control adyacentes.

Una secci´on de un spline queda completamente determinada con cuatro puntos de control consecutivos. Los puntos de control centrales son los puntos extremos de la secci´on, y otros dos los puntos se utilizan en el calculo de las pendientes en los puntos extremos. Si tomamos P(u) como la representaci´on de la funci´on de punto param´etrica cubica de la secci´on de curva entre los puntos de control Pk−1 hasta Pk+1 se utilizan para establecer las condiciones en los limites de la secci´on del spline de este modo:




Por tanto, las pendientes en los puntos de control Pk y Pk+1 se toman proporcionales, respectivamente, a las cuerdas Pk
−1 Pk+1 y Pk Pk+2 el par´ametro t se denomina par´ametro de tensi´on, ya que controla como de flo jo o apretado se a justa el spline a los puntos de control de entrada.
Utilizando m´etodos similares a los utilizados para los polinomios Hermite, podemos convertir las condiciones de (2.1) de los limites en su forma matricial,



Donde la Matriz Catmun-Rom es:



con s = (1 − t)/2.
Desarrollando la Ecuacion matricial (2.2) en forma polinomica, tenemos:



donde los polinomios C ARK (u) con K = 0, 1, 2, 3 son las funciones de combinacion de la matriz base de los splines Catmull-Rom.

2 El caso del Curva Catmull-Rom
2.1 Se propone el siguiente P.




2.2 Se tienen unos M’s de:



De donde obtenemos la matriz base de Catmull-Rom multiplicandolas:



2.3 Con lo que nos queda un P(u).
Obtenemos C ARen conformidad con (2.2) para obtener (2.4) matricial(P (u)).




2.4 El Codigo en GNUPLOT

P1(t) = (-0.5*t*t*t + 1*t*t - 0.5*t + 0)
P2(t) = ( 1.5*t*t*t - 2.5*t*t + 0*t + 1)
P3(t) = (-1.5*t*t*t + 2*t*t + 0.5*t + 0)
P4(t) = ( 0.5*t*t*t - 0.5*t*t + 0*t + 0)
x1(t) = 1*P1(t) + 2*P2(t) + 4*P3(t) + 6*P4(t)
y1(t) = 8*P1(t) + 3*P2(t) + 8*P3(t) + 3*P4(t)
x2(t) = 2*P1(t) + 4*P2(t) + 6*P3(t) + 8*P4(t)
y2(t) = 3*P1(t) + 8*P2(t) + 3*P3(t) + 8*P4(t)
x3(t) = 4*P1(t) + 6*P2(t) + 8*P3(t) + 10*P4(t)
y3(t) = 8*P1(t) + 3*P2(t) + 8*P3(t) + 3*P4(t)
x4(t) = 4*P1(t) + 6*P2(t) + 8*P3(t) + 20*P4(t)
y4(t) = 8*P1(t) + 3*P2(t) + 8*P3(t) + 20*P4(t)
set xrange [0:10]
set yrange [0:10]
set multiplot
plot ’puntos.txt’ w p ps 2
set parametric
set trange [0:1]
plot x1(t), y1(t), x2(t), y2(t), x3(t), y3(t) ,x4(t), y4(t)
unset multiplot
pause -1

2.5 Resultado

Labels: ,

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home