-
Matlab自带quiver函数就可以实现
-
首先介绍下quiver
-
quiver(X,Y,U,V) 在由 X 和 Y 指定的笛卡尔坐标上绘制具有定向分量 U 和 V 的箭头。例如,第一个箭头源于点 X(1) 和 Y(1),按 U(1) 水平延伸,按 V(1) 垂直延伸。默认情况下,quiver 函数缩放箭头长度,使其不重叠。
-
quiver(U,V) 在等距点上绘制箭头,箭头的定向分量由 U 和 V 指定。
-
如果 U 和 V 是向量,则箭头的 x 坐标范围是从 1 到 U 和 V 中的元素数,并且 y 坐标均为 1。
-
如果 U 和 V 是矩阵,则箭头的 x 坐标范围是从 1 到 U 和 V 中的列数,箭头的 y 坐标范围是从 1 到 U 和 V 中的行数。
-
quiver(___,scale) 调整箭头的长度:当 scale 为正数时,quiver 函数会自动调整箭头的长度,使其不重叠,然后将箭头长度拉伸 scale 倍。例如,scale 为 2 会使箭头长度加倍,scale 为 0.5 会使箭头长度减半。当 scale 为 0 时,如 quiver(X,Y,U,V,0),则禁用自动缩放。
-
-
2d的位姿一般就是 [ x , y , θ ] [x, y, \theta] [x,y,θ],所以u,v分量直接用极坐标的形式, [ r c o s ( θ ) , r s i n ( θ ) ] [rcos(\theta),rsin(\theta)] [rcos(θ),rsin(θ)]就可以了,当然这里要注意一下你使用的 θ \theta θ是和谁的夹角,然后自己做调整吧
-
写一个例子,箭头的大小设置为0.1
clc;clear;close all;
%
num = 10;
x = [1:num];
y = [1:num];
theta = pi/4 *ones(1,num);
u = cos(theta);
v = sin(theta);
scatter(x,y);hold on;
quiver(x,y,u,v,0.1);