2016-07-04 101 views
1

我在MATLAB绘制一个Delaunay图像这样的: - one角度计算的Delaunay图

我要计算在图中的所有角度。我有无序形式的所有点的x和y值,并且我不知道如何对点进行排序,因为x和y值对于同一行上的这些点是接近的。

+0

http://se.mathworks.com/matlabcentral/answers/152631-to-calculate-the-angles-of-the-delaunay-triangles – KiW

回答

1

的一种方式做到这一点:

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 
+0

我喜欢你的答案,但是你的代码存在错误。你需要改变你的循环条件'for i = 1:length(x)'可能是这样的:'for i = 1:3'或者这个:'for i = 1:length(x)-1'或者this this :'for i = 1:size(tri,1)' –

+0

何耶当然是'1:size(tri,1)'谢谢 – obchardon