箭头加直线_【Matlab学习秘籍】绘制带箭头的流线2012伦敦奥运会吉祥物
问题来源:某讨论群某同学的提问,想做出⼀个带有箭头电场的流线图。
绘制流线,Matlab提供了streamline函数,由于我也是第⼀次遇到这个问题,于是乎打开streamline的帮助⽂档,然后仔细查看⼀番,⼼⾥便有了思路,开始动⼿实践,下⾯就以这个函数的官⽅帮助⽂档⾥的demo来演⽰,如何实现在流线上绘制箭头。
clear; clc;
一旦拥有别无所求% 直接把streamline函数的帮助⽂档demo拷贝过来
[x,y] = meshgrid(0:0.1:1, 0:0.1:1);
u = x;
国际音标在线学习v = -y;
startx = 0.1:0.1:0.9;
starty = ones(size(startx));
% 需要获取所有流线的属性
lines = streamline(x, y, u, v, startx, starty);
% 下⾯开始画箭头,涉及到坐标的转换
% 获取 Axes 位置
composition的意思posAxes = get(gca, 'Position');
posX = posAxes(1);
posY = posAxes(2);
width = posAxes(3);
height = posAxes(4);
% 获取 Axes 范围
telephone是什么意思limX = get(gca, 'Xlim');
imagezoglimY = get(gca, 'Ylim');
艳丽的拼音
minX = limX(1);
maxX = limX(2);
minY = limY(1);
maxY = limY(2);
% 遍历,逐条流线加箭头
for i = 1 : length(lines)
cryonmyshoulder歌词% 获取每条流线的数据
xData = lines(i).XData;
yData = lines(i).YData;
% 这⾥取的是最后两个点,⼀定要是相邻的两个点⽤来确定箭头⽅向 x0 = xData(end-1 : end);
y0 = yData(end-1 : end);
% 转换坐标到相对于figure的坐标
xNew = posX + (x0 - minX) / (maxX - minX) * width;
yNew = posY + (y0 - minY) / (maxY - minY) * height;
% 画箭头
hold on
annotation('arrow', xNew, yNew, 'color', 'b');
end
hold off
title('带箭头的流线图');
看看效果图:
有声读物下载mp3
带有箭头的流线图
【秘籍】
1. 获取流线的坐标数据,如何获取,查看帮助⽂档得知,绘制时赋值即可获取到所有绘制对象的属性,然后逐条流线获取数据即可;
2. 绘制箭头,这个⽅法前⾯也有⽂章提到过(【Matlab学习秘籍】绘制带箭头直线),这⾥把主要过程也重复了⼀遍;whiteflag
3. 关于箭头的两个坐标,选取两个相邻的点,⽅便确定箭头的⽅向。