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

% Funçao para resolver o problema de indefiniçao dos pontos extremos
% (problema de integaçao da luz reflectida) 
%----------------------------------------------------------

function [feature_pontos]=EXTREME_PROBLEM(feature_pontos,factor_dist_extremos,cart_data)

            % Ciclo onde se verifica se os pontos extremos pertencem ao nao ao elemento
            % METODO garantir que a distancia entre os extremos que nao pode exceder o dobro da maxima distancia dos dois vizinhos mais proximos
            for ii1=1:size(feature_pontos(:,1))
                
                %teste para o ponto inicial da feature
                d=sqrt( (cart_data(feature_pontos(ii1,1),1)-cart_data(feature_pontos(ii1,1)+1,1))^2 + (cart_data(feature_pontos(ii1,1),2)-cart_data(feature_pontos(ii1,1)+1,2))^2 );
                d1=sqrt( (cart_data(feature_pontos(ii1,1)+1,1)-cart_data(feature_pontos(ii1,1)+2,1))^2 + (cart_data(feature_pontos(ii1,1)+1,2)-cart_data(feature_pontos(ii1,1)+2,2))^2 );
                d2=sqrt( (cart_data(feature_pontos(ii1,1)+2,1)-cart_data(feature_pontos(ii1,1)+3,1))^2 + (cart_data(feature_pontos(ii1,1)+2,2)-cart_data(feature_pontos(ii1,1)+3,2))^2 );
	
                if d > (max(d1,d2)*factor_dist_extremos) % se TRUE, ponto nao pertence ao elemento
                    feature_pontos(ii1,1)=feature_pontos(ii1,1)+1; % elimina o ponto inicial da feature avancando um ponto no scan
                end
                        
                %teste para o ponto final da feature
                d3=sqrt( (cart_data(feature_pontos(ii1,2),1)-cart_data(feature_pontos(ii1,2)-1,1))^2 + (cart_data(feature_pontos(ii1,2),2)-cart_data(feature_pontos(ii1,2)-1,2))^2 );
                d4=sqrt( (cart_data(feature_pontos(ii1,2)-1,1)-cart_data(feature_pontos(ii1,2)-2,1))^2 + (cart_data(feature_pontos(ii1,2)-1,2)-cart_data(feature_pontos(ii1,2)-2,2))^2 );
                d5=sqrt( (cart_data(feature_pontos(ii1,2)-2,1)-cart_data(feature_pontos(ii1,2)-3,1))^2 + (cart_data(feature_pontos(ii1,2)-2,2)-cart_data(feature_pontos(ii1,2)-3,2))^2 );
	
                if d3 > (max(d4,d5)*factor_dist_extremos) %se TRUE, ponto nao pertence ao elemento
                    feature_pontos(ii1,2)=feature_pontos(ii1,2)-1; % elimina o ponto final da feature recuando um ponto no scan
                end
                
            end
            % -------------------------------------------------------------------------------------------------------------------------------------------
            
