I have a List
of 2D points. What's an efficient way of iterating through the points in order to determine whether the list of points are in a straight line, or curved (and to what degree). I'd like to avoid simply getting slopes between smaller subsets. How would I go about doing this?
Thanks for any help
Edit: Thanks for the response. To clarify, I don't need it to be numerically accurate, but I'd like to determine if the user has created a curved shape with their mouse and, if so, how sharp the curve is. The values are not too important, as long as it's possible to determine the difference between a sharp curve and a slightly softer one.
If you simply want to know if all your points fit more or less on a curve of degree d
, simply apply Lagrange interpolation on the endpoints and d-2
equally spaced points from inside your array. This will give you a polynomial of degree d
.
Once you have your curve, simply iterate over the array and see how far away from the curve each point is. If they're farther than a threshold, your data doesn't fit your degree d
polynomial.
Edit: I should mention that iterating through values of d
is a finite process. Once d
reaches the number of points you have, you'll get a perfect fit because of how Lagrange interpolation works.