По пункту 1. Длина будет минимальна, если углы наклона прямых (A; P) и (P;

Код
ang := pi;
for i:=1 to N do
begin
if (xA = M[i, 1]) then
ang1:= pi/2
else
ang1:= arctan((M[i,2] - yA)/(M[i,1] - xA));
if (xB = M[i, 1]) then
ang2:= pi/2
else
ang2:= arctan(yB - (M[i,2])/(xB - M[i,1]));
if (abs(ang2 - ang1) < abs(ang)) then
begin
ang:= abs(ang2 - ang1);
MinX:= M[i, 1];
MinY:= M[i, 2];
end;
end;
В MinX и MinY будут нужные координаты точки.
По второму пункту.
Нужно сформировать множество P, точки которых лежат на ломаных A-M-B и A-P-B меньше какой-то длины.
Если нужная длина меньше расстояния между A и B, то таких точек не существует. Если больше, то существует для всех ломаных.
Найдем расстояние от точек A и B для каждой ломаной, которое нам подходит.
Найдем расстояние от точки A, при котором A-P-B равняется нужной длине и лежит на прямой A-M. Для этого нужно решить уравнение sqrt(sqr(Ax - Px) + sqr(Ay - Py)) = s. Причем Py должна лежать на прямой A-M. То есть Py = (My - Ay)/(Mx - Ax)*Px + Ay.
Обозначим (My - Ay)/(Mx - Ax), как A. Получим sqrt(sqr(Ax - Px) + sqr(Ay - (A*Px + Ay)) = s. Отсюда Px = (Ax+sqrt(sqrt(s) - sqr(A)*sqr(Ax)+sqr(A)*sqr(s)))/(1+sqr(A)). Py = A*Px + Ay. Если sqrt(sqr(Ax - Px) + sqr(Ay - Py)) больше, чем sqrt(sqr(Ax - Mx) + sqr(My - Py)), то точка может лежать в любом месте отрезка A-M. Если же меньше, то точка должна лежать по x - между Ax и Px, по y - между Ay и Py. Аналогично для отрезка M-B. И так для всех отрезков.
Вроде ничего не пропустил
