%-----------------------------------------------------------
% Carlos Cabral 2003 - Dep.UA

% teste para poder ser candidato a pilar circular 
%----------------------------------------------------------

function [i8,cond,feature_pontos]=TESTCANDIDATOPILARCIRC(i2,feature_pontos,data,cart_data,r)

    % -------------------Teste para candidato a pilar circular------------------------------
    if i2 ~= 1 % condiçao necessario para o caso de nao serem identificados nenhuma feature
               
        % processo de identificaçao de pilares circulares
        feature_pontos(:,3)=feature_pontos(:,2)-feature_pontos(:,1);
    
        %funçao para eliminar todos os elementos que tenham 0 pontos de largura, os gradiente positivo e negativo sao consecutivos aparecendo um elemento que começa e termina no mesmo ponto
        feature_pontos(find(feature_pontos(:,3)==0),:)=[];
        
        i8=0;
        if isempty(feature_pontos) % condiçao caso seja somente encontrada uma feature muito fina com 0 pontos de largura
        i8=1; 
        % para quando nao e detectado nenhum pilar
        feature_pontos=NaN;
        i8=NaN;
        cond=NaN;
        else
            clear ref_pilares valor_med L arc n_pontos cond
            
            for i5=1:size(feature_pontos(:,1))
                % encontrar a distancia minima em cada feature
                Dmin(i5)=min(data(feature_pontos(i5,1):feature_pontos(i5,2)));
                % calcular o angulo entre os dois penultimos feixes das extremidades da feature (por isso e que é feature_pontos(i5,3)-2
                ang=(feature_pontos(i5,3)-2)*0.5;
                m=tan((-ang/2+90)*pi/180);
                b=-(Dmin(i5)+r);

                % calculo do valor de x para a intersepçao da recta com a circunferencia
                equa_quadratica(:,1)=1+m^2;
                equa_quadratica(:,2)=2*m*b';
                equa_quadratica(:,3)=b'^2-r^2;
     
                raizes=roots(equa_quadratica);
                if isreal(raizes) % testar se tem soluçao a intercepçao entre a recta e a circunferencia
                    % Calculo de L estimado em funçao de (r,Dmin,ang)
                    Le=2*min(raizes);
                    % Calculo de L real em funçao das coordenadas dos extremos (calculo da distancia euclidiana)
                    L=sqrt( ( cart_data(feature_pontos(i5,2)-1,1)-cart_data(feature_pontos(i5,1)+1,1) )^2 + ( cart_data(feature_pontos(i5,2)-1,2)-cart_data(feature_pontos(i5,1)+1,2) )^2 );
                    
                    cond(i5,:)=L/Le;               
                else
                    cond(i5,:)=NaN;
                end
                
                 %--------------------------
                 %teste efectivo de largura
                 ang_abertura_ideal=2*asin(r/(r+Dmin(i5)))*180/pi;
                 ang_abertura_real=feature_pontos(i5,3)*0.5;
              
                 if ang_abertura_real < ang_abertura_ideal+1 && ang_abertura_real > ang_abertura_ideal-1
                     cond(i5,2)=1;
                 else
                     cond(i5,2)=0;
                     cond(i5,1)=NaN;
                 end
                 %--------------------------     
                
            end
%             figure(1)
%             subplot (2,1,2)
%             plot(1:360,grad1,1:360,grad,feature(:,1),grad(feature(:,1)),'r.',feature(:,2),grad(feature(:,2)),'r.'), grid on, axis([0 360 -7500 7500])  
            cond;
            feature_pontos;         
        end
    else
        % para quando nao e detectado nenhum pilar
        feature_pontos=NaN;
        i8=NaN;
        cond=NaN;
    end
    
    
    
    %--------------------------------------------------------------------------------------