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