Les réponses existantes ne tiennent pas compte du fait que les points finaux sont arbitraires (plutôt que donnés). Ainsi, lors de la mesure de la rectitude de la courbe, il n’est pas logique d’utiliser les points finaux (par exemple, pour calculer la longueur, l’angle, la position attendus). Un exemple simple serait une ligne droite avec les deux extrémités coupées. Si nous mesurons en utilisant la distance de la courbe et la ligne droite entre les points extrêmes, celle-ci sera assez grande, car la ligne droite que nous avons tracée est décalée par rapport à la ligne droite entre les points extrêmes.
Comment pouvons-nous dire à quel point la courbe est droite? En supposant que la courbe soit suffisamment lisse, nous voulons savoir dans quelle mesure la tangente à la courbe change en moyenne. Pour une ligne, ce serait zéro (car la tangente est constante).
Si on laisse la position à l'instant t être (x (t), y (t)), alors la tangente est (Dx (t), Dy (t)), où Dx (t) est la dérivée de x à l'instant t (ce site semble manquer du support TeX). Si la courbe n'est pas paramétrée par la longueur de l'arc, on normalise en divisant par || (Dx (t), Dy (t)) ||. Nous avons donc un vecteur unitaire (ou angle) de la tangente à la courbe au temps t. Donc, l'angle est a (t) = (Dx (t), Dy (t)) / || (Dx (t), Dy (t)) ||
Nous sommes alors intéressés par || Da (t) || ^ 2 intégré le long de la courbe.
Étant donné que nous avons très probablement des points de données discrets plutôt qu'une courbe, nous devons utiliser des différences finies pour approximer les dérivées. Alors, Da (t) devient (a(t+h)-a(t))/h
. Et a (t) devient ((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)/||((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)||
. Nous obtenons ensuite S en faisant la somme h||Da(t)||^2
de tous les points de données et en normalisant éventuellement par la longueur de la courbe. Très probablement, nous utilisons h=1
, mais c'est vraiment un facteur d'échelle arbitraire.
Pour réitérer, S sera zéro pour une ligne et plus grand, plus il s'écarte d'une ligne. Pour convertir au format requis, utilisez 1/(1+S)
. Étant donné que l'échelle est quelque peu arbitraire, il est possible de multiplier S par un nombre positif (ou de le transformer d'une autre manière, par exemple, utilisez bS ^ c au lieu de S) pour ajuster la droite de certaines courbes.