最近的項目中想要在一組離散數組中找到在一條直線上的點,於是想到每三個點計算一下夾角,如果在一條直線上,那麼夾角應該在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