Matlab --- 如何用matlab在三维坐标系中画一个三维向量

2023-10-27

用MATLAB画三维向量

        前两天,我在写Gram-Schmidt正交化的文章时,想到最好用matlab把还没有经过正交化计算的原始向量,和已经经过正交化处理后的正交基,在三维坐标系中,用图像的方式表示出来。这样可以更加直观的看到向量与向量之间的“垂直”,而不是通过计算向量之间的内积去证明他们“正交”。

        事实上,我之前多次有过在三维坐标系中作图的需求,一直也没有找到非常合适的。比如说,在三维坐标系中画一个点,等。这一次,我在画三维向量的时候,无意中找到了一个函数quiver3(),他可以实现在三维坐标系中画一个或多个三维向量的问题。

1,首先,我们用quiver3函数画一个向量v=[1,2,8]

先定义向量的坐标原点为[0,0,0]

X=[0];
Y=[0];
Z=[0];

定义一个三维向量

U=[1];
V=[2];
W=[8];

画图

figure;
quiver3(X,Y,Z,U,V,W,0,'LineWidth',1)

其中,“W”后面的参数“0”,表示的是对图像中向量长度的缩放(只能是一个正整数,例如2,这就是说,图像中向量的长度是实际向量长度的两倍),也就是上面语法中的Scale。一般情况下,如果你不输入scale参数,例如,直接使用quiver3(X,Y,Z,U,V,W),为了美化图像matlab会自动对向量的长度进行适当的缩放。所以,要想在图像中“按照一比一的比例”画出我们输入的向量,我们应该把scale参数关掉,关掉的方法就是令scale=0,即off。(默认为auto)

"LineWidth"表示图画中线的宽度,一般不用可以去设置,我这里写的1,是为了看的更清楚,默认值可能是0.5或者0.7吧,反正没有1粗。

最终得到如下图像,为了显示scale=0的效果,我把默认值scale=auto的图像也给出来了。

向量[1,2,8]在x-y平面的投影图

 向量[1,2,8]在x-z平面的投影图

        从上面的比较图可以看出,当scale=0,也就是auto scale为off时(上图右边)。向量在x,y,z各个方向的长度都和我们实际输入的一致,但如果是auto scale(上图左边),可以看到向量的长度相对于右图会有一定比例的缩小。

这是matlab官方文档中,对“Scale”参数的说明和部分图示:

最后输入:

axis equal

        他让每个坐标轴都使用统一标准的刻度尺去绘图,这也就是说,matlab在用quiver3去画向量图的时候,他也默认对坐标轴进行了不同程度的缩放,以至于,本例中的向量[1,2,8],在图中看起来,箭头在x,y,z三个方向的长度都差不多。在z方向的比例尺为0,2,4,6,8(红色),x轴的比例尺为0,0.2,0.4,0.6,0.8,1(黄色),在y轴方向的比例尺为0,0.5,1,1.5,2(蓝色)。

 输入axis equal后,因为,向量在x,y,z各轴,都使用同一尺寸的标准刻度,因为,向量[1,2,8]的方向也会非常精准,如下图所示。

2,我们用quiver3函数画2个向量v1=[1,1,1],v2=[1,3,5]

        一样,先分别定义两个向量的坐标原点[0,0,0],其中X,Y,Z中的第一个元素表示的是第一个向量v1的起始坐标,第二个元素是第二个向量v2的起始坐标。

X=[0,0];
Y=[0,0];
Z=[0,0];

        其次,输入两个向量v1,v2,同样,v1中的三个值,被分别存放在U,V,W的第一个元素中,v2中的三个值则放在U,V,W的第二个元素中。

U=[1,1];
V=[1,3];
W=[1,5];

画图 

figure;
quiver3(X,Y,Z,U,V,W,0,'LineWidth',1)
legend('v1,v2','Location','northwest')

        其中,函数legend()用于给图像配上说明文字。如果要在图中把两个向量区别开,并用不同颜色来表示,则要像之前画单个向量的方法一个个的画。

X=[0];
Y=[0];
Z=[0];
U=[1];
V=[1];
W=[1];

quiver3(X,Y,Z,U,V,W,0,'LineWidth',1)
axis equal
hold on

U=[1];
V=[3];
W=[5];
quiver3(X,Y,Z,U,V,W,0,'LineWidth',1)
axis equal
legend('v1','v2','Location','northwest')

两个的向量的颜色也可以通过参数color单独指定,‘r’为红色,‘k’为黑色:

X=[0];
Y=[0];
Z=[0];
U=[1];
V=[1];
W=[1];

quiver3(X,Y,Z,U,V,W,0,'LineWidth',1,'Color','r')
axis equal
hold on

U=[1];
V=[3];
W=[5];
quiver3(X,Y,Z,U,V,W,0,'LineWidth',1,'Color','k')
axis equal
legend('v1','v2','Location','northwest')

如果想用其他的自定义颜色,可参考如下说明:

3,用quiver3画多组向量,并用不同颜色来表示

%plot b
X=[0];
Y=[0];
Z=[0];
U=[1];
V=[3];
W=[5];
quiver3(X,Y,Z,U,V,W,0,'LineWidth',1)
axis equal

%plot x,y,z
X=[0,0,0];
Y=[0,0,0];
Z=[0,0,0];
U=[1,0,0];
V=[0,1,0];
W=[0,0,1];
quiver3(X,Y,Z,U,V,W,0,'LineWidth',1)
axis equal

%plot projection of b
X=[0];
Y=[0];
Z=[0];
U=[1];
V=[3];
W=[0];
quiver3(X,Y,Z,U,V,W,0,'LineWidth',1)
axis equal

legend('vector b','x,y,z','projection','Location','northwest')

如图,我在同一副图中画了三组向量:

1,向量b,

2,x-y-z轴上的单位向量

3,向量b在x-y平面上的投影。 


(全文完)

作者 --- 松下J27

参考文献(鸣谢):

1,三维箭头图或向量图 - MATLAB quiver3- MathWorks 中国

(配图与本文无关)

版权声明:文中的部分图片,文字或者其他素材,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab --- 如何用matlab在三维坐标系中画一个三维向量 的相关文章

  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 绘制布朗运动 matlab

    首先 我只想说我不太习惯使用matlab 但我需要一个作业 我应该创建一个 布朗运动 我的代码目前如下所示 clf hold on prompt Ge ett input size input prompt numParticles inp
  • 在矩阵中找到叉的最快方法

    定义 A i j 1 是十字的中点 如果元素A i 1 j 1A i 1 j 1A i j 1 1A i j 1 1 这些元素和中点一起形成矩阵 A 中的十字 其中 A 至少是一个 3 3 矩阵 并且i j 0 假设上图是 8 8 矩阵 A
  • 在 Pari-GP 中嵌套特定递归

    每个人 我最初在 Stackexchange 上发布了类似的问题 它已移至此处 可以在链接中找到 在 Matlab 中声明函数递归序列 https stackoverflow com questions 67146061 declaring
  • MATLAB 中的逻辑数组与数值数组

    我正在比较两个二进制数组 我有一个数组 其中值可以是一或零 如果值相同则为 1 如果不同则为零 请注意 我正在做检查之外的其他事情 因此我们不需要进入矢量化或代码的性质 在 MATLAB 中使用数值数组和逻辑数组哪个更有效 Logical
  • 图像处理方面的空间和时间表征有什么区别?

    我是学习图像处理的初学者 我对空间和时间表征的概念有点困惑 那么 对于空间表征来说 是不是像一张二维地图 包含了一些关于地图的统计信息呢 就时间特征而言 值是相对于时间的吗 这意味着什么以及我们为何关心 谢谢 当您在不同时间拍摄一系列图像时
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • MATLAB 问题中的 Parfor

    为什么我不能使用parfor在这段代码中 parfor i 1 r for j 1 N r xr j N r i 1 x i r j 1 end end 这是错误 错误 parfor 中的变量 xr 无法分类 请参阅 MATLAB 中的并行
  • Matlab:如何读取以逗号作为小数分隔符的数字?

    我有很多 数十万 相当大 gt 0 5MB 的文件 其中数据是数字 但以逗号作为小数分隔符 使用像这样的外部工具对我来说是不切实际的sed s g 当分隔符是点时 我只使用textscan fid f f f 但我看不到更改小数点分隔符的选
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • MATLAB;具有 2+ 个/分割图例的饼图 R2017b

    我正在创建一个饼图 理想情况下希望图例水平显示在顶部和 或底部 然而 在几乎所有情况下 这是不可能的 因为图例超出了数字 因此 我理想情况下希望将图例分成两个 或更多 子图例并单独放置它们 我知道这不是 MATLAB 中的内置功能 我使用的
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • 在 Matlab 中将绘图从高斯混合变换为均匀分布

    考虑以下抽签2x1Matlab 中的向量 其概率分布是两个高斯分量的混合 P 10 3 number draws v 1 First component mu a 0 0 5 sigma a v 0 0 v Second component
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 继续在 Matlab 中一遍又一遍地播放声音?

    我正在尝试创建一个 MATLAB 程序来每隔几分钟一遍又一遍地播放声音 现在我将其设置为每隔几秒播放一次 只是为了消除系统中的一些错误 但是 当我的程序尝试重播声音时 我收到此错误 Error using gt audioplayer au

随机推荐

  • Qt Designer UI设计布局小结

    目录 前言 1 居中布局 2 左右布局 3 上下布局 4 复杂页面布局 总结 前言 本文总结了在开发Qt应用程序时使用 Designer 进行UI布局的一些心得体会 Qt Designer是Qt提供的一个可视化界面设计工具 旨在帮助开发人员
  • Matlab 改变图像尺寸

    问题 我们在进行图像相关的实验时 需要对读取后的图片进行处理 改变图片尺寸就是其中一种处理 方法 1 imresize 利用插值方法重塑图像大小 P imread picture jpg 读取处理的图像 new P imresize P m
  • 1.1.1 Qt信号槽之connect与disconnect介绍

    关于Qt信号槽中connect与disconnect介绍 首先我们要知道 如果想要使用Qt中的信号槽机制 那么必须继承QObject类 因为QObject类中包含了信号槽的一系列操作 今天我们来讲解的是信号与槽怎么建立连接以及断开连接 一
  • Python爬虫之findall和lxml

    Python爬虫之findall和lxml 提示 前言 Python爬虫之findall和lxml 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 Python爬虫之findall和lxml 前言 一 导入包 二
  • vivo 自研鲁班分布式 ID 服务实践

    作者 vivo IT 平台团队 An Peng 本文介绍了什么是分布式ID 分布式ID的业务场景以及9种分布式ID的实现方式 同时基于vivo内部IT的业务场景 介绍了自研鲁班分布式ID服务的实践 一 方案背景 1 1 分布式ID应用的场景
  • 任务调度框架 Quartz 用法指南(超详细)

    点击关注 Java基基 2022 07 31 11 55 发表于上海 点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 每天 14 00 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝
  • C语言打印菱形

    思路 简单明了的说一下 首先我们可以将菱形分成上半部分和下半部分 用3个for循环打印上半部分 再用3个for循环打印下半部分 至于for循环里面的判断条件为什么要这样写 你记住就行了 不要问为什么 你问的话 它逻辑就是通的 define
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记1——课程简介篇

    北京大学肖臻老师 区块链技术与应用 公开课笔记 课程简介篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page 区块链的本质是什么 观点1 区块链是下一代价值
  • VMware Workstation及CentOS-7虚机安装

    创建新的虚机 选择安装软件 这里选的是桌面版 也可以根据实际情况进行选择 等待检查软件依赖关系 选择安装位置 自主配置分区 创建一个普通用户 安装完成后重启 点击完成配置 进入登陆界面 输入账号密码进入系统
  • STM32 复合设备编写

    目的 完成一个CDC MSC的复合USB设备 可以方便在CDC MSC 复合设备三者间切换 可移植性强 预备知识 cube中USB只有两个入口 main函数中的MX USB DEVICE Init函数 init function void
  • (十七)STM32——定时器

    目录 学习目标 内容 简介 定时器分类 定时器功能介绍 计时器模式 工作过程 内部时钟选择 寄存器 配置 代码 总结 学习目标 本节内容我们来介绍一下有关定时器的知识 其实这个定时器 和我们日常接触的定时器没有什么区别 都是到了一定的时间就
  • ajax简单异步图片上传,Ajax简单异步上传图片并回显

    前台代码 上传图片按钮 选择图片 隐藏的文件选择器 图片预览 去除图片预览未选择时默认时的边框 img src img not src opacity 0 JavaScript部分 function uploadPhoto photoFil
  • Qt--拖放操作

    Qt 拖放操作 1 使用拖放打开文件 将桌面上的 txt文件拖入程序打开 新建Widget项目 项目名称为mydragdrop 类名和积累保持MainWindow和QMainWindow不变 建立完项目后 往界面上拖入一个Text Edit
  • C/C++库函数strstr和find实现子字符串查找

    1 子字符串查找实现Demo include
  • win10 ping不通 Docker ip(解决截图)

    背景 win10下载了docker desktop就是这个图 然后计划做一个springboot连接docker docker部署springboot docker 部署springboot 成功 截图 總鑽風的博客 CSDN博客 问题 s
  • 【Google测试之道】第五章 Google软件测试改进

  • 基于token和基于session用户认证两种方式区别

    背景知识 Authentication和Authorization的区别 Authentication 用户认证 指的是验证用户的身份 例如你希望以小A的身份登录 那么应用程序需要通过用户名和密码确认你真的是小A Authorization
  • Unity打开项目之Hold on,之第一次打开25G的文件夹,之我的自闭之旅

    环境 Unity2017 4 36 VS2019 Windows10 介绍 使用Unity打开一个进25G的项目 文件中包含各个平台的代码 第一次打开花费了进4个小时 关闭后在次打开花费了近 按理说只有第一次加载才会需要很长时间 第二次相对
  • Stata学习笔记

    今天学习的视频是 Stata入门 外部命令安装 哔哩哔哩 bilibili up主 silencedream Stata设置 如何快速安装3000 外部命令 连玉君老师PLUS文件 哔哩哔哩 bilibili up主 小志小视界 外部命令安
  • Matlab --- 如何用matlab在三维坐标系中画一个三维向量

    用MATLAB画三维向量 前两天 我在写Gram Schmidt正交化的文章时 想到最好用matlab把还没有经过正交化计算的原始向量 和已经经过正交化处理后的正交基 在三维坐标系中 用图像的方式表示出来 这样可以更加直观的看到向量与向量之