
Shortest distance between a point and a line segment One solution is to use BigDecimal and whichever method you want if incurring in performance and memory hit is not an issue.Ī more precise method than comparing distances for floating points, and, more importantly, consistently precise, although at a higher computational cost, is calculating the distance to the closest point in the line. I used floats in the example but the same applies to any floating point type such as double. If we use a more precise method like calculating the distance to the closest point in the line, it returns a value that a float has enough precision to store and we could return false depending on the acceptable epsilon. But none of those values can be stored on a float with enough precission and the method will return true. The distance from either end of the segment to the point is 1000.0000000005 or 1000 + 5E-10, and, thus, the difference with the addition of the distance to and from the point is around 1E-9. Let's say a segment goes from (0, 0) to (0, 2000), we are using floats in our application (which have around 7 decimal places of precision) and we test whether a point on (1E-6, 1000) is on the line or not. For a computer program there is no such thing as a point on a line, there is only point within an epsilon of a line and what that epsilon is needs to be documented.

Why precision is important? Because it's the very problem presented by op. Basically the methods described will tell you if your point is close enough to the line using some straightforward algorithm and that it will be more or less precise. I think all the methods here have a pitfall, in that they are not dealing with rounding errors as rigorously as they could.
