function [A,G] = cumanglefun(contour)
% Funkce pro výpočet úhlové (A) funkce a kumulativní úhlové (G)
% funkce dle vzorce A(n) = atan((y'-w)/(x'-w)), kde w je malé okno pro
% výpočet diferencí. Kvůli možným nespojitostem je vypočtena kumulativní
% úhlová funkce dle vzorce G = [A(n) - A(0)].
% Vstup je posloupnost souřadnic analyzované kontury ve tvaru (x:y,:).

X = contour(2,:); %x souřadnice kontury
Y = contour(1,:); %y souřadnie kontury
M =length(X); %počet bodů kontury
okno = 10; %velikost okna
A = zeros(1,M); %deklarace úhlové funkce
for i=1:M %pro vsechny body kontury
    x1 = 0;
    x2 = 0;
    y1 = 0;
    y2 = 0;
    for j=1:okno
        pa = i-j;
        pb = i+j;
        if pa<1
            pa = M+pa;
        end
        if pb>M
            pb = pb-M;
        end
        x1 = x1+X(pa);
        y1 = y1+Y(pa);
        x2 = x2+X(pb);
        y2 = y2+Y(pb);
    end
    x1 = x1/okno;
    x2 = x2/okno;
    y1 = y1/okno;
    y2 = y2/okno;
    dx = x2-x1;
    dy = y2-y1;
    if dx==0
        dx = 1e-5;
    end
    if dx>0 && dy>0
        A(i) = atan(dy/dx);
    elseif dx>0 && dy<0
        A(i) = atan(dy/dx)+2*pi;
    else
        A(i) = atan(dy/dx)+pi;
    end
end

G = zeros(1,M); %deklarace kumulativni úhlové funkce
G(1) = 0;
for i=2:M
    d = min(abs(A(i)-A(i-1)), abs(abs(A(i)-A(i-1))-2*pi));
    if d>0.5
        G(i) = G(i-1);
    elseif (A(i)-A(i-1))<-pi
        G(i) = G(i-1)-(A(i)-A(i-1)+2*pi);
    elseif (A(i)-A(i-1))>pi
        G(i) = G(i-1)-(A(i)-A(i-1)-2*pi);
    else
        G(i) = G(i-1)-(A(i)-A(i-1));
    end
end
end
