It is possible with the data you have. Let's call the line segment vw and the point p: vec2 projection_point(vec2 v, vec2 w, vec2 p) { const float l2 = length_squared(v, w); // i.e. |w-v|^2 - avoid a sqrt // Consider the line extending the segment, parameterized as v + t (w - v). // We find projection of point p onto the line. // It falls where t = [(p-v) . (w-v)] / |w-v|^2 // We clamp t from [0,1] to handle points outside the segment vw. const float t = max(0, min(1, dot(p - v, w - v) / l2)); return v + t * (w - v); // Projection point that falls on the segment } This function returns the nearest point on the line segment. The above code is derived from here: https://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment