MATLAB自定义函数绘制箭头路径图

在绘制路径或者相关的图时,需要带箭头的可视化图形标注路径的变化过程,以及相应的序号。今天主要以实例讲解MATLAB自定义函数绘制路径图。


1.实例1

从同一起点出发的顺序图。

图形结果

主程序

% MATLAB自定义函数绘制箭头图
clc;%清除命令行窗口命令
clear all;%清除工作区变量
close all;%关闭图形窗口
rng(600);


%加载数据
data = rand(15,2);
figure;
plot(data(:,1),data(:,2),'bs','markerface','b','markersize',10);
xlabel('经度');
ylabel('纬度');
hold on;
start_point = data(1,:);%起点相同
len = 0.03;
for i = 2:length(data(:,1))
    end_point = data(i,:);%终点不同
    plot_arrow(start_point, end_point,len,'k');%调用函数绘制
end
%标注文字
text(data(1,1),data(1,2)-0.05,'0');
%利用循环标注文本
for i = 2:15
    %利用num2str函数将文本数字转化成字符标注
    text(data(i,1),data(i,2)+0.05,num2str(i-1));
end

绘图的自定义函数plot_arrow.m

function plot_arrow(start,end_p,len,color)
%% 函数功能:在二维图形中绘制起点在start终点在end_p的箭头
% 输入 start为起点的二维坐标  end_p为终点的二维坐标 
% len为箭头的比例系数 color为箭头的颜色
theta = pi / 8;  %箭头角度
A1 = [cos(theta)  -sin(theta);
     sin(theta)  cos(theta)];  %旋转矩阵
theta = -theta;
A2 = [cos(theta)  -sin(theta);
     sin(theta)  cos(theta)];  %旋转矩阵
arrow = start' - end_p';%起始坐标距离差距
arrow_1 = A1 * arrow;
arrow_2 = A2 * arrow;
arrow_1 = len * arrow_1 + end_p';
arrow_2 = len * arrow_2 + end_p';
hold on;
grid on;
plot([start(1), end_p(1)], [start(2), end_p(2)], 'color',color);%绘制长直线
% 绘制箭头
plot([arrow_1(1), end_p(1)], [arrow_1(2), end_p(2)], 'color',color);
plot([arrow_2(1), end_p(1)], [arrow_2(2), end_p(2)], 'color',color);
end

2.实例2

路径规划的结果图

主程序

clc;%清除命令行窗口命令
clear all;%清除工作区变量
close all;%关闭图形窗口
rng(500);
n=12;%点的个数
x=10*rand(n,2);%随机生成点
scatter(x(:,1),x(:,2),'filled');
k = 0.05;
for i=2:n
    plot_arrow(x(i-1,:), x(i,:),k,'r');
end
 plot_arrow(x(n,:), x(1,:),k,'r');
text(x(:,1),x(:,2),arrayfun(@(x)['  ' num2str(x)],1:n,'UniformOutput',0))
%arrayfun 将函数应用于每个数组元素
% 要以元胞数组形式返回输出值,请指定 'UniformOutput',false
box on;

绘图的自定义函数plot_arrow.m

function plot_arrow(start,end_p,len,color)
%% 函数功能:在二维图形中绘制起点在start终点在end_p的箭头
% 输入 start为起点的二维坐标  end_p为终点的二维坐标 
% len为箭头的比例系数 color为箭头的颜色
theta = pi / 8;  %箭头角度
A1 = [cos(theta)  -sin(theta);
     sin(theta)  cos(theta)];  %旋转矩阵
theta = -theta;
A2 = [cos(theta)  -sin(theta);
     sin(theta)  cos(theta)];  %旋转矩阵
arrow = start' - end_p';%起始坐标距离差距
arrow_1 = A1 * arrow;
arrow_2 = A2 * arrow;
arrow_1 = len * arrow_1 + end_p';
arrow_2 = len * arrow_2 + end_p';
hold on;
grid on;
plot([start(1), end_p(1)], [start(2), end_p(2)], 'color',color);%绘制长直线
% 绘制箭头
plot([arrow_1(1), end_p(1)], [arrow_1(2), end_p(2)], 'color',color);
plot([arrow_2(1), end_p(1)], [arrow_2(2), end_p(2)], 'color',color);
end

3.参考内容

[1] CSDN作者IT猿手的文章《Matlab画带箭头的图》,文章链接如下:

https://blog.csdn.net/weixin_46204734/article/details/122221299

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。


作 者 | 郭志龙

编 辑 | 郭志龙
校 对 | 郭志龙

举报
评论 0