我的阵列中有(它们是动态的)点。如何找到它们构成完整图形的边缘之间的角度(我的意思是每个节点具有相等或多于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
答案 0 :(得分:2)
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。
更新:您的代码提供“奇怪”的原因。结果可能是因为你以弧度为单位获得角度,而在我的代码中我明确地转换为度数。