在MATLAB中如何找到数组中多个点之间的角度?

时间:2015-12-06 12:17:04

标签: matlab

我的阵列中有(它们是动态的)点。如何找到它们构成完整图形的边缘之间的角度(我的意思是每个节点具有相等或多于2个边缘)? 这些是我的观点,例如:

  

177 159
  217 104
  154 69
  178 92
  178 125
  161 100
  72 32
  117 67

(如link of duplicate post所述,我使用该代码查找每个边缘之间的角度。这是我的代码,但结果很奇怪)

for i=1:length(array2)
    for j=i+1:length(array2)-1
        %-------------------------------------
        p1=[array2(i,1),array2(i,2)];
        p2=[array2(j,1),array2(j,2)];
        p3=[array2((j+1),1),array2((j+1),2)];
        %-------------------------------------
        v1=p1-p2;
        v2=p3-p2;
        %-------------------------------------
        n1=v1/norm(v1);
        n2=v2/norm(v2);
        %-------------------------------------
        cos_p2=dot(n1,n2);
        acos(cos_p2)
    end;
end;

结果在这里。但他们不喜欢角度!!

  

ans =

1.4491
     

ans =

0.5565
     

ans =

0.0149
     

ans =

2.5150
     

ans =

2.4880
     

ans =

0.2189
     

ans =

0.2570
     

ans =

1.2723
     

ans =

1.6740
     

ans =

2.5605
     

ans =

0.2002
     

ans =

2.3349
     

ans =

0.1923
     

ans =

0.6963
     

ans =

0.2372
     

ans =

0.5972
     

ans =

2.0493
     

ans =

0.1460
     

ans =

2.8204
     

ans =

0.0591
     

ans =

0.0086

1 个答案:

答案 0 :(得分:2)

这会计算连接问题中各点的线之间的角度: enter image description here

a = [177 159; 217 104; 154 69; 178 92; 178 125; 161 100; 72 32; 117 67];  

for i = 1:max(size(a))-2
   temp1 = [a(i, 1)-a(i+1, 1), a(i, 2) - a(i+1, 2)];
   temp2 = [a(i+2, 1)-a(i+1, 1), a(i+2, 2) - a(i+1, 2)];
   temp1 = temp1 / norm(temp1);
   temp2 = temp2 / norm(temp2);
   theta(i) = acos( dot(temp1, temp2) )/pi*180;
end
plot(a(:,1), a(:, 2));
  

theta =

83.0272   14.7265  133.7811   34.2157  161.5972    0.4935

可能有更好的方法来执行此向量化,有些更多背景可以查看MATLAB Central和此SO-post

更新:您的代码提供“奇怪”的原因。结果可能是因为你以弧度为单位获得角度,而在我的代码中我明确地转换为度数。