Search code examples
matlabmatlab-figuredelaunay

Angle calculation in a Delaunay graph


I have plotted a Delaunay graph in MATLAB like this one:- one

I want to calculate all the angles in the graph. I have the x and y values for all the points in disordered form, and I don't know how to sort the points because the x and y values are close for those points on the same row.


Solution

  • One way to do that:

    x = randn(1,4)*10;
    y = randn(1,4)*10;
    
    %calculate the triangulation
    tri = delaunay(x,y);
    
    %Plot the graph
    triplot(tri,x,y)
    hold on
    
    plot(x,y,'ro')
    text(x,y,strsplit(num2str(1:length(x))))
    
    
    % Determine each angle
    for i = 1:size(tri,1)
        per = perms(tri(i,:));
        [~, ind] = unique(per(:,2)); %avoid to calculate two time the same angle.
        per = per(ind,:); %the 3 * 3 points that create the angle of each triangle
        for j = 1:3
           P_1 = per(j,1);
           P1 = [x(P_1),y(P_1)];
           P_2 = per(j,2);
           P2 = [x(P_2),y(P_2)];
           P_3 = per(j,3);
           P3 = [x(P_3),y(P_3)];
           ANG = rad2deg(atan2(abs(det([P3-P2;P1-P2])),dot(P3-P2,P1-P2))); %P2 is the point in the middle
           fprintf('Node %d %d %d angle %f\n',P_1, P_2, P_3, ANG)
        end
    end