箭头加直线_【Matlab学习秘籍】绘制带箭头的流线

本文介绍如何在Matlab中使用streamline函数绘制带箭头的流线图。通过获取流线坐标数据并利用之前教程的方法绘制箭头,实现电场流线的可视化。文中提供了一个官方示例的简化演示过程。
摘要由CSDN通过智能技术生成

aceb22c84f2b786a7bf749a710e1046c.png

问题来源:某讨论群某同学的提问,想做出一个带有箭头电场的流线图。

绘制流线,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 位置
posAxes = get(gca, 'Position');
posX = posAxes(1);
posY = posAxes(2);
width = posAxes(3);
height = posAxes(4);
% 获取 Axes 范围
limX = get(gca, 'Xlim');
limY = get(gca, 'Ylim');
minX = limX(1);
maxX = limX(2);
minY = limY(1);
maxY = limY(2);
% 遍历,逐条流线加箭头
for i = 1 : length(lines)
    % 获取每条流线的数据
    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('带箭头的流线图');

看看效果图:

60a8d610bc39a91572d48a436531ddc1.png
带有箭头的流线图

【秘籍】

  1. 获取流线的坐标数据,如何获取,查看帮助文档得知,绘制时赋值即可获取到所有绘制对象的属性,然后逐条流线获取数据即可;
  2. 绘制箭头,这个方法前面也有文章提到过(【Matlab学习秘籍】绘制带箭头直线),这里把主要过程也重复了一遍;
  3. 关于箭头的两个坐标,选取两个相邻的点,方便确定箭头的方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值