关于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;
相关推荐
czhc114007566318 小时前
C# 1124 接收
开发语言·c#
司铭鸿20 小时前
祖先关系的数学重构:从家谱到算法的思维跃迁
开发语言·数据结构·人工智能·算法·重构·c#·哈希算法
wavemap20 小时前
先到先得:免费订阅一年ChatGPT Go会员
开发语言·chatgpt·golang
m***D28620 小时前
JavaScript在Node.js中的内存管理
开发语言·javascript·node.js
我叫张小白。20 小时前
JavaScript现代语法梳理:ES6+核心特性详解
开发语言·javascript·typescript·es6
-森屿安年-21 小时前
LeetCode 283. 移动零
开发语言·c++·算法·leetcode
寻找华年的锦瑟21 小时前
Qt-FFmpeg案例(0基础,包含环境配置)
开发语言·qt·ffmpeg
tanxiaomi21 小时前
Spring、Spring MVC 和 Spring Boot ,mybatis 相关面试题
java·开发语言·mybatis
浮尘笔记21 小时前
Go并发编程核心:Mutex和RWMutex的用法
开发语言·后端·golang
散峰而望21 小时前
C++数组(一)(算法竞赛)
c语言·开发语言·c++·算法·github