%MIN_KROG vrne sredisce in radij minimalnega kroga,
%ki vsebuje dane tocke
%[Sm,rm]=MIN_KROG(T);
%T je tabela 2xn tock v ravnini, Sm=[xm,ym]-sredisce
%rm-radij
function [Sm,rm]=min_krog(T);
  n=size(T,2);
  %najprej preverimo moznost, da krog skozi dve tocki
  %na premeru mnozice vsebuje vse tocke
  %
  %poiscemo najbolj oddaljeni tocki
  dmax=0;%max razdalja
  i1=1;%
  i2=1;% indeksa tock z max razdaljo
  for i=1:n-1
    for j=i+1:n
      d=norm(T(:,i)-T(:,j),2);
      if d>dmax %nov par najbolj oddaljenih tock
        dmax=d;
	i1=i;
	i2=j;
      end 
    end
  end
  Sm=(T(:,i1)+T(:,i2))/2;
  rm=dmax/2;%kandidata za sredisce in radij
  odg=vsebuje(Sm,rm,T);
  %preverimo, ali krog s srediscem na razpoloviscu najbolj 
  %oddaljenih tock in radijem, ki je pol te razdalje
  % vsebuje vse tocke; ce jih je odg=1
  if odg==0
    %kandidat ni dober, poiscemo ga med vsemi krogi skozi
    %tri tocke; izpuscamo trojke, ki so kolinearne, saj ne morejo
    %dati kandidata
    Sm=[0;0];
    rm=inf;
    for i=1:n-2;
      for j=i+1:n-1;
        for k=j+1:n
          %najprej preverimo, ali so tocke kolinarne
	  if abs(det([T(:,j)-T(:,i) T(:,k)-T(:,i)]))>eps
            [S,r]=ocrtan_krog(T(:,[i,j,k]));
            odg=vsebuje(S,r,T);
            if (odg==1)&(r<rm)
              Sm=S;
              rm=r;
            end
          end               
        end
      end
    end
  end

function odg=vsebuje(S,r,T);
  %preverimo, ali krog s srediscem v S in radijem r
  %vsebuje vse tocke iz tabele T
  tab=((T(1,:)-S(1)).^2+(T(2,:)-S(2)).^2-r^2)<=eps;
  %ce so v tab same enke, krog vsebuje vse tocke;
  odg=all(tab);
