关于MATLAB计算3维图的向量夹角总是不正确的问题记录

文章目录


问题描述

因为最近在做无人机的一个项目,所以需要画出无人机的轨迹,然后再提取特征值,我这里在计算夹角的时候发现为什么在视觉上明明看的是钝角但是实际计算出来却是锐角的角度。

如下图所示,看起来就是一个钝角,但是计算的结果始终是锐角。

解决方法

后来去请教了一下师姐,才发现是因为向量的方向问题,我想要计算的是上面这一种形式,但是我按照我的写法实际上是下面那一种形式。

改正之前的写法:

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;
相关推荐
Hello World . .2 分钟前
数据结构:二叉树(Binary tree)
c语言·开发语言·数据结构·vim
叫我辉哥e13 分钟前
新手进阶Python:办公看板升级交互式可视化+移动端适配+多终端同步
开发语言·python
1candobetter8 分钟前
JAVA后端开发——Spring Boot 组件化自动配置机制
java·开发语言·spring boot
一个网络学徒12 分钟前
python练习3
开发语言·python
专注VB编程开发20年16 分钟前
无 $ 后缀的变体版函数(Mid、InStr)
java·开发语言
程序员敲代码吗17 分钟前
C++运行库修复指南:解决游戏办公软件报错问题
开发语言·c++·游戏
熊猫钓鱼>_>21 分钟前
深入理解Java堆栈:从原理到面试实战
java·开发语言·面试·职场和发展·面向对象·堆栈·oop
孞㐑¥24 分钟前
算法—哈希表
开发语言·c++·经验分享·笔记·算法
cici1587425 分钟前
基于MATLAB的非正交多址(NOMA)系统协同中继技术提升小区边缘用户性能实现
java·服务器·matlab
骆驼爱记录26 分钟前
Word通配符技巧:高效文档处理指南
开发语言·c#·自动化·word·excel·wps·新人首发