HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Curve di interpolazione con tangenti  (Letto 1886 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

marcomasetti

  • Newbie
    ...sono qui da poco, il mio miglior amico è il pulsante RICERCA
  • *
  • Post: 183
Curve di interpolazione con tangenti
« il: 04 Agosto 2013, 11:58 »
Volendo definire una curva che attraversa parecchi nodi, occorrerebbe dividerla in parti. Per raccordarle, però, è necessario conoscerne le tangenti agli estremi, cosa che non permette il metodo di interpolazione che abbiamo illustrato.  Di fatto le cosiddette SPLINE a due dimensioni, di uso comune nei programmi,  sono sequenze di archi di Bézier che vengono raccordati tramite le tangenti, che assumono la stessa direzione lungo il nodo comune. L’utilità di poter intervenire su tali tangenti è pure utile per definire la forma della curva. Vogliamo dunque elaborare tipi di curve interpolate che permettano di agire sulle tangenti agli estremi.
Ritorniamo pertanto alle curve di Bézier, per esempio a quella di grado 4:
OP=t^4*P5+4*t^3*(1-t)*P4+6*t^2*(1-t)^2*P3+3*t*(1-t)^3*P2+t^4*(1-t)^P1
La prima ed ultima coppia di termini definiscono inizio e termine della curva, con le relative tangenti, consideriamo pertanto come variabile il terzo vettore, imponendo il passaggio per un determinato punto, che indichiamo ancora con P3. In questo caso P3 non sarà più un nodo del poligono di Bézier, ma un punto di passaggio della curva algebrica di grado 4:
OP3=t1^4*P5+4*t1^3*(1-t1)*P4+6*t1^2*(1-t1)^2*Q+3*t1*(1-t1)^3*P2+(1-t1)^4*P1
Qui viene introdotto il valore t1, che potrebbe essere assunto pari a ½, ma che è arbitrario, purché compreso entro 0 e 1.  Q è l’incognita vettoriale. P1,P3,P5 sono i punti di passaggio della curva, P2-P1 rappresenta il vettore tangente in P1, P4-P5 è il vettore tangente in P5.
Tale equazione vettoriale corrisponde alle equazioni:
t1^4*px5+4*t1^3*(1-t1)*px4+6*t1^2*(1-t1)^2*qx+3*t1*(1-t1)^3*px2+(1-t1)^4*px1=px3
t1^4*py5+4*t1^3*(1-t1)*py4+6*t1^2*(1-t1)^2*qy+3*t1*(1-t1)^3*py2+(1-t1)^4*py1=py3
t1^4*pz5+4*t1^3*(1-t1)*pz4+6*t1^2*(1-t1)^2*qz+3*t1*(1-t1)^3*pz2+(1-t1)^4*pz1=pz3
con soluzione:
qx=(px3-t1^4*px5-4*t1^3*(1-t1)*px4-3*t1*(1-t1)^3*px2-(1-t1)^4*px1)/(6*t1^2*(1-t1)^2)
qy=(py3-t1^4*py5-4*t1^3*(1-t1)*py4-3*t1*(1-t1)^3*py2-(1-t1)^4*py1)/(6*t1^2*(1-t1)^2)
qz=(pz3-t1^4*pz5-4*t1^3*(1-t1)*pz4-3*t1*(1-t1)^3*pz2-(1-t1)^4*pz1)/(6*t1^2*(1-t1)^2)
In questo caso più semplice si tratta di tre “sistemi” ad una incognita, quindi tre semplici equazioni lineari.
La curva corrisponderà allora all’equazione vettoriale:
OP=t^4*P5+4*t^3*(1-t)*P4+t^2*(1-t)^2*Q+3*t*(1-t)^3*P2+(1-t)^4*P1
Ovvero a:
x=t^4*px5+4*t^3*(1-t)*px4+t^2*(1-t)^2*qx+3*t*(1-t)^3*px2+(1-t)^4*px1
y=t^4*py5+4*t^3*(1-t)*py4+t^2*(1-t)^2*qy+3*t*(1-t)^3*py2+(1-t)^4*py1
z=t^4*pz5+4*t^3*(1-t)*pz4+t^2*(1-t)^2*qz+3*t*(1-t)^3*pz2+(1-t)^4*pz1

Dato che il numero massimo di incognite che possiamo praticamente assumere è 5, possiamo arrivare fino alla curva algebrica di grado 8. Consideriamo quella di grado 7.
La curva di Bézier relativa (omettendo i termini interni) ha la forma:
OP=t^7*P8+7*t^6*(1-t)*P7+…+7*t*(1-t)^6*P2+(1-t)^7*P1
Poniamo:
j(t)= t^7*P8+7*t^6*(1-t)*P7+7*t*(1-t)^6*P2+(1-t)^7*P1
ji=ti^7*P8+7*ti^6*(1-ti)*P7+7*ti*(1-ti)^6*P2+(1-ti)^7*P1   con i da 1 a 4
La nuova curva avrà la forma:
OP=j(t)+ t^5*(1-t)^2*Q4+t^4*(1-t)^3*Q3+t^3*(1-t)^4*Q2+t^2*(1-t)^5*Q1
Dove Q1,Q2,Q3,Q4 sono le incognite da definire in funzione dei punti di passaggio della curva P1,P3,P4,P5, P6,P8 , dei vettori tangenti P2-P1,P7-P8 e dei “tempi di percorrenza” t1,t2,t3,t4. Naturalmente t varia da 0 a 1 e i valori interni ti vanno scelti di conseguenza.
Il sistema di equazioni in 4 incognite Qi, espresso in forma vettoriale, è dunque:
t1^5*(1-t1)^2*Q4+t1^4*(1-t1)^3*Q3+t1^3*(1-t1)^4*Q2+t1^2*(1-t1)^5*Q1=OP3-j1
t2^5*(1-t2)^2*Q4+t2^4*(1-t2)^3*Q3+t2^3*(1-t2)^4*Q2+t2^2*(1-t2)^5*Q1=OP4-j2
t3^5*(1-t3)^2*Q4+t3^4*(1-t3)^3*Q3+t3^3*(1-t3)^4*Q2+t3^2*(1-t3)^5*Q1=OP5-j3
t4^5*(1-t4)^2*Q4+t4^4*(1-t4)^3*Q3+t4^3*(1-t4)^4*Q2+t4^2*(1-t4)^5*Q1=OP6-j4

Di fatto non siamo riusciti ad interpolare con una unica curva un  certo numero, tra l’altro molto limitato, di punti. Abbiamo costruito invece fasci di curve. Ma a ben considerare pure le curve classiche di Bézier, in particolare quelle del grado 3, definiscono in effetti non una singola curva, ma piuttosto fasci di curve a partire dai punti iniziale e finale. Cambiando la direzione o il modulo delle tangenti la forma della curva varia notevolmente. Occorrerebbe studiare se anche per queste curve più complesse sia possibile intervenire con una interfaccia intuitiva sui valori “temporali” ti per variarne la forma fino ad ottenere il risultato desiderato.