Las respuestas existentes no tienen en cuenta que los puntos finales son arbitrarios (en lugar de dados). Por lo tanto, al medir la rectitud de la curva, no tiene sentido usar los puntos finales (por ejemplo, para calcular la longitud, el ángulo, la posición esperados). Un ejemplo simple sería una línea recta con ambos extremos doblados. Si medimos usando la distancia desde la curva y la línea recta entre los puntos finales, esto será bastante grande, ya que la línea recta que hemos dibujado está desplazada de la línea recta entre los puntos finales.
¿Cómo sabemos qué tan recta es la curva? Suponiendo que la curva es lo suficientemente suave, queremos saber cuánto, en promedio, está cambiando la tangente a la curva. Para una línea, esto sería cero (ya que la tangente es constante).
Si dejamos que la posición en el tiempo t sea (x (t), y (t)), entonces la tangente es (Dx (t), Dy (t)), donde Dx (t) es la derivada de x en el tiempo t (este sitio parece no tener soporte para TeX). Si la curva no está parametrizada por la longitud del arco, normalizamos dividiendo entre || (Dx (t), Dy (t)) ||. Entonces tenemos un vector unitario (o ángulo) de la tangente a la curva en el tiempo t. Entonces, el ángulo es a (t) = (Dx (t), Dy (t)) / || (Dx (t), Dy (t)) ||
Entonces estamos interesados en || Da (t) || ^ 2 integrado a lo largo de la curva.
Dado que lo más probable es que tengamos puntos de datos discretos en lugar de una curva, debemos usar diferencias finitas para aproximar las derivadas. Entonces, Da (t) se convierte (a(t+h)-a(t))/h
. Y, a (t) se convierte ((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)/||((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)||
. Luego obtenemos S sumando h||Da(t)||^2
todos los puntos de datos y posiblemente normalizándolos por la longitud de la curva. Lo más probable es que lo usemos h=1
, pero en realidad es solo un factor de escala arbitrario.
Para reiterar, S será cero para una línea y más grande cuanto más se desvía de una línea. Para convertir al formato requerido, use 1/(1+S)
. Dado que la escala es algo arbitraria, es posible multiplicar S por algún número positivo (o transformarlo de alguna otra manera, por ejemplo, usar bS ^ c en lugar de S) para ajustar qué tan rectas son ciertas curvas.