Teoria

Le spline usate dal gioco per disegnare il percorso della pallina, sono spline di Catmull Rom. Supponiamo di voler calcolare la curva f(t) che interpoli due generici punti Pi e Pi+1

La prima cosa da fare è prendere in considerazione i punti Pi-1 e Pi+2; questi punti verranno utilizzati per aggiustare la forma della curva,definendo implicitamente le tangenti su Pi e Pi+1:

In questo modo, le tangenti sui due punti centrali risulteranno parallele al segmento tra i due punti adiacenti. Il parametro α appena introdotto è la tensione della spline ed è compreso tra 0 e 1. Come si potrà vedere più avanti, più il valore di α si avvicina a 1, più la spline risulta tondeggiante. Dato che le spline utilizzate sono cubiche, l’equazione base sarà:

I coefficienti possono essere calcolati a partire dai vincoli geometrici dati dai punti Pi e Pi+1 e dalle tangenti, avremo quindi:

Da [1] e dal fatto che f’(t) = 3at2 + 2bt + c, otteniamo:

A questo punto possiamo riscrivere [3] come:

E [2] come:

Facendo quindi l’uguaglianza tra [4a] e [4b] si ottiene:

A questo punto se prendiamo

sappiamo che MM-1 = I. Possiamo quindi calcolare la matrice M-1 senza grosse difficoltà:

Adesso possiamo risolvere [4c] e ottenere i coefficienti:

A questo punto possiamo quindi riscrivere [1] come:

In questo modo, al variare di t tra 0 e 1 otterremo tutti i punti necessari per disegnare la curva tra Pi e Pi+1. A questo punto se calcoliamo abbastanza punti intermedi, riusciremo a disegnare la spline.

È importante far notare che:

  • * il valore di α utilizzato dall’applicazione è di 0.5.
  • * la comodità principale dell’utilizzo delle Catmull Rom è il fatto che, a differenza di altri metodi di interpolazione, non bisogna risolvere sistemi di equazioni, dato che [5] può essere riscritta come:
    f(t) = α ((Pi / α) + (-Pi-1 + Pi+1) t + (2Pi-1 + Pi – (3 / α)Pi + (3 / α)Pi+1 - 2Pi+1 - Pi+2)t2 + (-Pi-1 + (2 / α)Pi – Pi + Pi+1 – (2 / α)Pi+1 + Pi+2)t3)
    Questo è molto comodo perché il computer è molto veloce ad eseguire questo calcolo, quindi anche se si dovessero calcolare molti punti tra Pi e Pi+1, il giocatore non nota eccessivi rallentamenti.
  • * Tra due punti qualsiasi inseriti dal giocatore vengono sempre calcolati 10 punti intermedi