文章目录
问题描述
因为最近在做无人机的一个项目,所以需要画出无人机的轨迹,然后再提取特征值,我这里在计算夹角的时候发现为什么在视觉上明明看的是钝角但是实际计算出来却是锐角的角度。
如下图所示,看起来就是一个钝角,但是计算的结果始终是锐角。
解决方法
后来去请教了一下师姐,才发现是因为向量的方向问题,我想要计算的是上面这一种形式,但是我按照我的写法实际上是下面那一种形式。
改正之前的写法:
matlab
vec1 = [x(2)-x(1),y(2)-y(1),z(2)-z(1)];
vec2 = [x(3)-x(2),y(3)-y(2),z(3)-z(2)];
cos_angle = dot(vec1 ,vec2)/(norm(vec1)*norm(vec2));
angle = acosd(cos_angle);
改正之后的写法:
matlab
vec1 = [x(1)-x(2),y(1)-y(2),z(1)-z(2)]; %更改了这里
vec2 = [x(3)-x(2),y(3)-y(2),z(3)-z(2)];
cos_angle = dot(vec1 ,vec2)/(norm(vec1)*norm(vec2));
angle = acosd(cos_angle);
结果就是钝角了,不得不说,还是师姐更厉害啊。
完整代码
matlab
clear;
clc;
x %yourData
y %yourData
z %yourData
vec1 = [x(1)-x(2),y(1)-y(2),z(1)-z(2)];
vec2 = [x(3)-x(2),y(3)-y(2),z(3)-z(2)];
cos_angle = dot(vec1 ,vec2)/(norm(vec1)*norm(vec2));
angle = acosd(cos_angle);
plot3(x, y, z, '-o', 'LineWidth', 1.5); % 连续点迹绘制轨迹
hold on;