2009-07-06 15 views
13

Da questo sito che sembra avere le informazioni più dettagliate sulle spline di catmull-rom: http://www.mvps.org/directx/articles/catmull/ fa menzione di aver bisogno di quattro punti per creare la spline. Tuttavia non menziona come i punti p0 e p3 influenzino i valori tra p1 e p2.Spline Catmull-Rom - come funzionano?

Un'altra domanda che ho è come creereste spline continue? Sarebbe facile come definire i punti p1, p2 essere continui con p4, p5 facendo p4 = p2 (supponendo che abbiamo p0, p1, p2, p3, p4, p5, p6 ... pN).

Una domanda più generale è: come si calcolano le tangenti sulle spline rom del catmull? Dovrebbe coinvolgere prendendo due punti sulla spline (diciamo a 0,01, 0,011) e ottenendo la tangente basata su Pitagora date le coordinate di posizione fornite da quei valori di input?

+0

Normale Catmull-Rom è anche soggetta a loop e autointersezione che può essere un problema. Consiglio vivamente di utilizzare la parametrizzazione centripeta mostrata qui: http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

risposta

8

Dai un'occhiata all'equazione 2: descrive come i punti di controllo influiscono sulla linea. Puoi vedere i punti P0 e P3 entrare nell'equazione per tracciare i punti lungo la curva da P1 a P2. Vedrai anche che l'equazione fornisce P1 quando t == 0 e P2 quando t == 1.

Questa equazione di esempio può essere generalizzata. Se si dispone di punti R0, R1, ... RN allora è possibile tracciare i punti tra RK e RK + 1 utilizzando l'equazione 2 con P0 = RK - 1, P1 = RK, P2 = RK + 1 e P3 = RK + 2.

Non si può tracciare R0-R1 o da RN - 1 a RN a meno che non si aggiunge punti di controllo in più per sostituire R - 1 e RN + 1. L'idea generale è che puoi scegliere qualsiasi punto che vuoi aggiungere alla testa e alla coda di una sequenza per darti tutti i parametri per calcolare la spline.

È possibile unire due spline insieme lasciando cadere uno dei punti di controllo tra di loro.Diciamo che sono R0, R1, ..., RN e S0, S1, ... SM possono essere uniti in R0, R1, ..., RN - 1, S1, S2, ... SM.

Per calcolare la tangente in qualsiasi punto basta prendere la derivata dell'equazione 2.

6

Wikipedia article aumenta leggermente. La forma generale della spline assume come input 2 punti di controllo con i relativi vettori tangenti. È possibile aggiungere ulteriori segmenti di spline purché i vettori tangenti nei punti di controllo comuni siano uguali, il che preserva la continuità C1.

Nella specifica forma Catmull-Rom, il vettore tangente nei punti intermedi è determinato dalle posizioni dei punti di controllo vicini. Pertanto, per creare una spline continua C1 attraverso più punti, è sufficiente fornire l'insieme di punti di controllo e i vettori tangenti al primo e all'ultimo punto di controllo. Penso che il comportamento standard sia usare P1 - P0 per il vettore tangente a P0 e PN - PN-1 a PN.

Secondo l'articolo di Wikipedia, per calcolare la tangente al punto di controllo Pn, si utilizza questa equazione:

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

Questo risponde anche alla tua prima domanda. Per un set di 4 punti di controllo, P1, P2, P3, P4, i valori di interpolazione tra P2 e P3 richiedono informazioni da tutti e 4 i punti di controllo. P2 e P3 stessi definiscono i punti finali attraverso i quali deve passare il segmento di interpolazione. P1 e P3 determinano il vettore tangente che il segmento interpolante avrà nel punto P2. P4 e P2 determinano il vettore tangente che il segmento avrà nel punto P3. I vettori tangenti ai punti di controllo P2 e P3 influenzano la forma del segmento di interpolazione tra di loro.

+1

Mi dispiace se mi manca qualcosa, ma potresti indicare dove nell'articolo si dà quella formula? Ne vedo uno diverso su http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline. (Non sono così bravo in matematica. Volevo solo sapere come hai ottenuto la formula.) –