% tel4.m
% fd, 05 novembre 2006, 05 mars 2025 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   clear ; format long 

fprintf ('test4 \n') ;
fprintf ('probleme du central telephonique ; cas de trois points \n') ;
clear ; format long 

hold off
xlabel ('') ;
x=[0;.1;1] ; y=x ; plot (x,y) ; hold off ; 
xa = -1 ; ya = -.8 ; xb = 1 ; yb = -.5 ;  xc = -.3 ; yc = 1 ; 
np = 3 ; 
noeud = zeros (2,np) ; 
noeud (1,1) = xa ;  noeud (2,1) = ya ; 
noeud (1,2) = xb ;  noeud (2,2) = yb ; 
noeud (1,3) = xc ;  noeud (2,3) = yc ; 
xmin = 1000 ; ymin = xmin ; xmax = -xmin ; ymax = xmax ; 
for j = 1 : np ; 
xmin = min ( xmin , noeud(1:1,j:j)) ; 
ymin = min ( ymin , noeud(2:2,j:j)) ; 
xmax = max ( xmax , noeud(1:1,j:j)) ; 
ymax = max ( ymax , noeud(2:2,j:j)) ; 
end ; deltax = xmax - xmin ;  deltay = ymax - ymin ; 
xmin = xmin - .1*deltax ;  xmax = xmax + .1*deltax ; 
ymin = ymin - .1*deltay ;  ymax = ymax + .1*deltay ;

hold off 
plot ( [xa  xb xc ] , [ya  yb yc ] , '*b;;') 
%%%   axis ( [ -.5 , 1.2 , -.5  , 1.2 ] , 'square' ) ;
axis ( [ xmin xmax ymin ymax ]  , 'square' ) ;
hold on ; 
n=arc(xa,ya,xb,yb) ; 
n=arc(xb,yb,xc,yc) ; 
n=arc(xc,yc,xa,ya) ; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        pb de minimisation 
x0 = 1 ; y0 = 1 ; 
plot ( x0 , y0 , '*m;;') 
x = x0 ; y = y0 ; 

for k = 1:35 ; 
gx = 0 ; gy = 0 ; 
for j = 1:np  ; 
apx = x - noeud(1:1,j:j)  ; 
apy = y - noeud(2:2,j:j) ; ap = sqrt(apx**2+apy**2) ; 
gx = gx + apx / ap ; gy = gy + apy / ap ; 
end 
ro = .2 ; 
xn = x - ro*gx ; yn = y - ro*gy ; 
plot ( xn , yn , '*r;;' , [x xn] , [y yn] , 'r;;') 
x=xn ; y = yn ; 
end ;

fprintf ('position qui minimise la somme des distances aux trois sommets \n') ;
xn , yn 



title ('gradient a pas fixe pour le probleme du central telephonique') ;
print('07a-gradient-pas-fixe-central-telephonique', '-djpg','-S891,630');
pause (1)


scale = .1 ; n=100;
for k = 1:3 ;
xmin = xn - scale ; ymin = yn - scale ;  
xmax = xn + scale ; ymax = yn + scale ;  
%%% m=arc2(xa,ya,xb,yb,n) ; 
%%% m=arc2(xb,yb,xc,yc,n) ; 
%%% m=arc2(xc,yc,xa,ya,n) ; 
scale = scale/10 ; n = 10*n ; 
axis ( [ xmin xmax ymin ymax ]  , 'square' ) ;

if k==1 ;
title ('zoom 1 autour de la solution optimale') ;
print('07b-gradient-pas-fixe-central-telephonique', '-djpg','-S891,630'); end 

if k==2 ; 
title ('zoom 2 autour de la solution optimale') ;
print('07c-gradient-pas-fixe-central-telephonique', '-djpg','-S891,630'); end 

if k==3 ; 
title ('zoom 3 autour de la solution optimale') ;
print('07d-gradient-pas-fixe-central-telephonique', '-djpg','-S891,630'); end 

pause (1) 
end 
