p0=[5 5]'; % Initial guess p=fminsearch(@dist2ABC, p0); A=[0 0]'; B=[3 0]'; C=[0 4]'; cosAPB=dot(A-p, B-p)/(norm(A-p)*norm(B-p)); cosBPC=dot(B-p, C-p)/(norm(B-p)*norm(C-p)); cosCPA=dot(C-p, A-p)/(norm(C-p)*norm(A-p)); fprintf('APB=%g degrees\n', acos(cosAPB)*180/pi); fprintf('BPC=%g degrees\n', acos(cosBPC)*180/pi); fprintf('CPA=%g degrees\n', acos(cosCPA)*180/pi); % ====== Create the objective function surface x=linspace(-1, 4, 51); y=linspace(-1, 5, 51); for i=1:length(x) for j=1:length(y); zz(j,i)=dist2ABC([x(i), y(j)]); end end % ====== Mesh & contour plot subplot(121); h=meshc(x, y, zz); axis image; box on xlabel('X'); ylabel('Y'); zlabel('Z'); set(h(1), 'faceAlpha', 0.1); % Make the mesh transparent axisLimit=axis; line(p(1), p(2), axisLimit(5), 'marker', '.', 'color', 'r'); line([A(1), B(1), C(1), A(1)], [A(2), B(2), C(2), A(2)], axisLimit(5)*[1 1 1 1], 'color', 'r', 'linewidth', 2); % ====== Detailed contour plot subplot(122); contour(x, y, zz, 100); axis image xlabel('X'); ylabel('Y'); zlabel('Z'); line([A(1), B(1), C(1), A(1)], [A(2), B(2), C(2), A(2)], 'color', 'r', 'linewidth', 2); line(p(1), p(2), 'marker', '.', 'color', 'r', 'markerSize', 20); line(A(1), A(2), 'marker', '.', 'color', 'k', 'markerSize', 20); line(B(1), B(2), 'marker', '.', 'color', 'k', 'markerSize', 20); line(C(1), C(2), 'marker', '.', 'color', 'k', 'markerSize', 20); text(A(1), A(2), 'A ', 'horizon', 'right'); text(B(1), B(2), ' B'); text(C(1), C(2), 'C ', 'horizon', 'right'); text(p(1), p(2), ' P');