最近的项目中想要在一组离散数组中找到在一条直线上的点,于是想到每三个点计算一下夹角,如果在一条直线上,那么夹角应该在180°左右。
代码实现如下:
%%数据x,y,z为存放用户数据的mx1的数组
%% 每三个点求夹角
for I=1:m-2
a2 = (y(I)-y(I+1))*(y(I)-y(I+1))+(z(I)-z(I+1))*(z(I)-z(I+1));
b2 = (y(I+2)-y(I+1))*(y(I+2)-y(I+1))+(z(I+2)-z(I+1))*(z(I+2)-z(I+1));
c2 = (y(I)-y(I+2))*(y(I)-y(I+2))+(z(I)-z(I+2))*(z(I)-z(I+2));
a = sqrt(a2);
b = sqrt(b2);
c = sqrt(c2);
pos(I) = (a2+b2-c2)/(2*a*b); %求出余弦值
angle(I) = acos(pos(I)); %余弦值装换为弧度值
realangle(I) = angle(I)*180/pi; %弧度值转换为角度值
disp(realangle(I));
end