clear all
close all
clc

x=rand(1,10)*5;
y=rand(1,10)*5;

% figure
% plot(x,y,'k.')

DT = delaunayTriangulation(x',y');

figure
triplot(DT.ConnectivityList,x,y,'k')









% NTriangles = size(DT.ConnectivityList,1);
% 
% % calcular as areas dos triangulos da DT
% Areas = zeros(NTriangles,1);
% for i = 1:NTriangles
%     PointIndexes = DT.ConnectivityList(i,:);
%     Areas(i) = polyarea(DT.Points(PointIndexes,1),DT.Points(PointIndexes,2));
% end
% 
% 
% % triangulos com areas muito pequenas ou muito grandes
% tri_large = find(Areas > 12);
% tri_small = find(Areas < 0.5);
% 
% % matriz de todos os triangulos a remover
% triangulos_a_remover = [tri_large(:,1);tri_small(:,1)];
% 
% % converter a delaunay triangulation para estutura para se conseguir "manipular" os dados
% dts = struct('Points', DT.Points, 'ConnectivityList', DT.ConnectivityList);
% 
% % remover a conectividade dos triangulos a remover
% dts.ConnectivityList(triangulos_a_remover,:) = [];
% 
% % fazer reshape da nova connectivity list
% nova_connectivityList = reshape(dts.ConnectivityList,[],3);
% 
% % visualizar a nova delaunay triangulation
% figure
% triplot(nova_connectivityList,dts.Points(:,1),dts.Points(:,2),'k')
% xlabel('x')
% ylabel('y')












% CALCULAR (x,y) DOS VERTICES DA CONNECTIVITY LIST
NVertices = size(DT.ConnectivityList,1);
matrix_vertices_coordenadas = zeros([size(DT.ConnectivityList,1) 6]);
for i=1:NVertices
    matrix_vertices_coordenadas(i,:) = [x(DT.ConnectivityList(i,1)) y(DT.ConnectivityList(i,1)) ...
        x(DT.ConnectivityList(i,2)) y(DT.ConnectivityList(i,2)) ...
        x(DT.ConnectivityList(i,3)) y(DT.ConnectivityList(i,3))];
end

% TRES MATRIZES COM OS (x,y) DOS VERTICES DE CADA TRIANGULO
primeiro_vertice_coord = [matrix_vertices_coordenadas(:,1) matrix_vertices_coordenadas(:,2)];
segundo_vertice_coord = [matrix_vertices_coordenadas(:,3) matrix_vertices_coordenadas(:,4)];
terceiro_vertice_coord = [matrix_vertices_coordenadas(:,5) matrix_vertices_coordenadas(:,6)];


% CALCULAR AS DISTANCIAS ENTRE VERTICES
distancias_arestas = zeros([size(DT.ConnectivityList,1) 3]);
for i=1:NVertices
    distancias_arestas(i,:) = [norm(primeiro_vertice_coord(i,:)-segundo_vertice_coord(i,:))...
        norm(primeiro_vertice_coord(i,:)-terceiro_vertice_coord(i,:)) ...
        norm(segundo_vertice_coord(i,:)-terceiro_vertice_coord(i,:))];
end




% ROW E COL (INDEX) DAS ARESTAS GRANDES
[arestas_grandes_row, arestas_grandes_col] = find(distancias_arestas(:,:) > 2);






NConnectivity = size(DT.ConnectivityList,1);
nova_connectivityList2 = zeros(size(DT.ConnectivityList,1)-size(arestas_grandes_row,1),3);
for i=1:NConnectivity
    if i ~= arestas_grandes_row    
        nova_connectivityList2(i,:) = [DT.ConnectivityList(i,:)];
    end
end

nova_connectivityList2(~any(nova_connectivityList2,2),:) = [];




figure
triplot(nova_connectivityList2,DT.Points(:,1),DT.Points(:,2),'k')
xlabel('x')
ylabel('y')







% % CONVERTER EM ESTRUTURA PARA FAZER MANIPULAÇAO DE DADOS
% dts = struct('Points', DT.Points, 'ConnectivityList', DT.ConnectivityList);
% 
% 
% for i=1:size(arestas_grandes_row,1)
% % REMOVER AS ARESTAS MAIORES
% dts.ConnectivityList(arestas_grandes_row(i,:)) = [];
% end
% 
% nova_connectivityList1 = reshape(dts.ConnectivityList,[],3);
% 
% 
% NPontosEliminados = size(arestas_grandes_row,1);
% 
% figure
% triplot(nova_connectivityList1,dts.Points(:,1),dts.Points(:,2),'k')
% xlabel('x')
% ylabel('y')
% 
% for i=1:NPontosEliminados
%     hold on
%     plot(primeiro_vertice_coord(arestas_grandes_row(i,1)),primeiro_vertice_coord(arestas_grandes_row(i),2),'gs','LineWidth',2)
%     hold on
%     plot(segundo_vertice_coord(arestas_grandes_row(i,1)),segundo_vertice_coord(arestas_grandes_row(i),2),'r*','LineWidth',2)
%     hold on
%     plot(terceiro_vertice_coord(arestas_grandes_row(i,1)),terceiro_vertice_coord(arestas_grandes_row(i),2),'y+','LineWidth',2)
% end
% 
