I am trying to determine the distance from a point to a polygon in 2D space. The point can be inside or outside the polygon; The polygon can be convex or concave.
If the point is within the polygon or outside the polygon with a distance smaller than a user-defined constant d, the procedure should return True; False otherwise.
I have found a similar question: Distance from a point to a polyhedron or to a polygon. However, the space is 2D in my case and the polygon can be concave, so it’s somehow different from that one.
I suppose there should be a method simpler than offsetting the polygon by d and determining it’s inside or outside the polygon.
Any algorithm, code, or hints for me to google around would be appreciated.
Your best bet is to iterate over all the lines and find the minimum distance from a point to a line segment.
To find the distance from a point to a line segment, you first find the distance from a point to a line by picking arbitrary points
P1andP2on the line (it might be wise to use your endpoints). Then take the vector fromP1to your pointP0and find(P2-P1) . (P0 - P1)where.is the dot product. Divide this value by||P2-P1||^2and get a valuer.Now if you picked
P1andP2as your points, you can simply check ifris between 0 and 1. Ifris greater than 1, thenP2is the closest point, so your distance is||P0-P2||. Ifris less than 0, thenP1is the closest point, so your distance is||P0-P1||.If
0<r<1, then your distance issqrt(||P0-P1||^2 - (r * ||P2-P1||)^2)The pseudocode is as follows: