How to plot circle with direction?
Afficher commentaires plus anciens
I wish to plot a circle with direction of its motion.An exmaple is attached below.

I wish to get around 5-10 arrows per circle (that can be chnaged as per our need).
Below attached matlab.mat file is the data file.
The code goes like:
subplot(2,2,[1 3])
h1 = plot(x, y, '-','Color','b','LineWidth',2);
Now I dont know how to put 5-10 arrows showing direction.
Can anyone help?
Réponses (1)
Bruno Luong
le 10 Sep 2019
Modifié(e) : Bruno Luong
le 10 Sep 2019
2D version. adapt to your need

% circle parameter
r = 5;
cx = 0;
cy = 0;
cfun = @(tt) [cx+r*cos(tt); cy+r*sin(tt)];
xy = cfun(linspace(0,2*pi,361));
close all
hold on
plot(xy(1,:),xy(2,:),'b');
% arrows parameters
m = 10; % number of arrows
h = 0.1*r; % height
w = 0.1*r; % width
dir = -1; % 1 anticlock, -1 clock
a = [-w/2 0 w/2;
-dir*h 0 -dir*h];
for k=1:m
tt = 2*pi*k/m;
R = [cos(tt) -sin(tt);
sin(tt) cos(tt)];
xy = cfun(tt)+ R*a;
plot(xy(1,:),xy(2,:),'b');
end
axis equal
5 commentaires
Bruno Luong
le 10 Sep 2019
Modifié(e) : Bruno Luong
le 10 Sep 2019
3D version:

% circle parameters
r = 5;
cxyz = [0; 0; 0]; % center
N = randn(3,1); % normal to circle plane
N = N(:)/norm(N);
Q = null(N');
cfun = @(tt) cxyz + r*Q*[cos(tt); sin(tt)];
close all
hold on
xyz = cfun(linspace(0,2*pi,361));
plot3(xyz(1,:),xyz(2,:),xyz(3,:),'b');
% 3D arrows parameters
m = 10; % number of arrows
h = 0.12*r; % height
w = 0.08*r; % width
dir = -1; % 1 anticlock, -1 clock
p = 16; % #circular discretization of the arrow
phi = linspace(0,2*pi,p+1);
Va = [(w/2)*cos(phi);
(-dir*h)+zeros(size(phi));
(w/2)*sin(phi)];
Va(:,end+1) = [0; 0; 0];
F = [ 1:p;
2:p+1;
(p+2)+zeros(1,p)].';
F2 = 1:p+1;
Q = [Q, N];
for k=1:m
tt = 2*pi*k/m;
R = [cos(tt) -sin(tt) 0;
sin(tt) cos(tt) 0;
0 0 1];
Vk = cfun(tt)+ Q*R*Va;
patch('Faces', F, 'Vertices', Vk', 'FaceColor', 'b', 'EdgeColor', 'none');
patch('Faces', F2, 'Vertices', Vk', 'FaceColor', 'b', 'EdgeColor', 'none');
end
axis equal
view(3);
Bruno Luong
le 11 Sep 2019
Modifié(e) : Bruno Luong
le 11 Sep 2019
No sorry, I won't process your data.
I let you adapt the code and plot exactly the way you like. If you have specific question feel free to ask.
Megha
le 11 Sep 2019
michael
le 20 Jan 2021
I'w suggest to set
X = 10; % this is step size - each 10th point will have a vector
vSelect0 = 1:X:(lenTime-1);
Catégories
En savoir plus sur Annotations dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
