关于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;
相关推荐
简朴-ocean33 分钟前
Linux | 调整子用户的权限为所有权
开发语言
fhvyxyci36 分钟前
【C++之STL】一文学会使用 string
开发语言·数据结构·c++·stl
未来之窗软件服务38 分钟前
业绩代码查询实战——php
android·开发语言·php·数据库嵌套
新手小袁_J42 分钟前
RabbitMQ的发布订阅模式
java·开发语言·redis·spring·缓存·java-rabbitmq
ChaoZiLL1 小时前
关于我的编程语言——C/C++——第四篇(深入1)
c语言·开发语言
zls3653651 小时前
C# WPF 与 JS 交互可以使用的第三方库
开发语言·javascript·c#·wpf·交互
cyt涛2 小时前
SpringCloudGateway — 网关路由
java·开发语言·网关·gateway·路由·断言·转发
李正己2 小时前
delphi 编译多语言工程 error RC2104 : undefined keyword or key name:
开发语言
Liquor14194 小时前
JavaScript知识点梳理及案例实践
开发语言·前端·javascript·python·css3·html5·js
无敌最俊朗@5 小时前
unity3d————球形插值知识点
开发语言·学习·unity·c#·游戏引擎