Le risposte esistenti non tengono conto del fatto che i punti finali sono arbitrari (piuttosto che forniti). Pertanto, quando si misura la rettilineità della curva, non ha senso utilizzare i punti finali (ad esempio, per calcolare la lunghezza, l'angolo, la posizione previsti). Un semplice esempio potrebbe essere una linea retta con entrambe le estremità piegate. Se misuriamo usando la distanza dalla curva e la linea retta tra i punti finali, questa sarà piuttosto grande, poiché la linea retta che abbiamo disegnato è sfalsata dalla linea retta tra i punti finali.
Come diciamo quanto è diritta la curva? Supponendo che la curva sia abbastanza regolare, vogliamo sapere quanto, in media, sta cambiando la tangente alla curva. Per una linea, questo sarebbe zero (poiché la tangente è costante).
Se lasciamo che la posizione al momento t sia (x (t), y (t)), allora la tangente è (Dx (t), Dy (t)), dove Dx (t) è la derivata di x al tempo t (questo sito sembra mancare il supporto TeX). Se la curva non è parametrizzata per lunghezza d'arco, normalizziamo dividendo per || (Dx (t), Dy (t)) ||. Quindi abbiamo un vettore unitario (o angolo) della tangente alla curva al tempo t. Quindi, l'angolo è a (t) = (Dx (t), Dy (t)) / || (Dx (t), Dy (t)) ||
Siamo quindi interessati a || Da (t) || ^ 2 integrato lungo la curva.
Dato che molto probabilmente abbiamo punti dati discreti piuttosto che una curva, dobbiamo usare differenze finite per approssimare i derivati. Quindi, Da (t) diventa (a(t+h)-a(t))/h
. E, diventa una (t) ((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)/||((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)||
. Quindi otteniamo S sommando h||Da(t)||^2
tutti i punti dati e possibilmente normalizzandoci per la lunghezza della curva. Molto probabilmente, lo usiamo h=1
, ma in realtà è solo un fattore di scala arbitrario.
Per ribadire, S sarà zero per una linea e più grande quanto più devia da una linea. Per convertire nel formato richiesto, utilizzare 1/(1+S)
. Dato che la scala è in qualche modo arbitraria, è possibile moltiplicare S per un numero positivo (o trasformarlo in qualche altro modo, ad esempio utilizzare bS ^ c invece di S) per regolare la rettilineità di alcune curve.