how to limit arrow length in 3D quiver plot?
9 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have a vector field with a large dynamic range; I would like to set a high threshold on vector magnitudes being displayed.
logarithmic scale would also help.
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (2)
Matt Kindig
am 5 Apr. 2012
For your situation, I would specify the length of the arrows directly, rather than letting Matlab perform the Auto-scaling of the vectors. This would allow you to specify upper bounds on the lengths, log scaling, or whatever else you prefer. Something like this:
% X,Y,Z are the origins of your vectors
% U,V,W are the directions of your vectors
Ln = sqrt(U.^2 + V.^2 +W.^2);
U = U./Ln; V = V./Ln; W = W./Ln; %normalize vectors
Maxlen = 100; %set this based on your preference
U = U*Maxlen; %this will set 'Maxlen' as the max length
V = V*Maxlen;
W = W*Maxlen;
%or for log scaling,
U = Maxlen*log(U); %or similar
V = Maxlen*log(V);
U =
hq = quiver3( X, Y, Z,
2 Kommentare
Matt Kindig
am 5 Apr. 2012
Ah, yes it would. My apologies. You should normalize by the maximum of Ln, rather than Ln itself.
Sean de Wolski
am 5 Apr. 2012
Couldn't you just takle the log or log10 f the u/v/w components?
2-d example:
[xx yy] = meshgrid(1:5);
u = (rand(5)+1).^(rand(5)*10);
v = (rand(5)+1).^(rand(5)*10);
quiver(xx(:),yy(:),log10(u(:)),log10(v(:)))
More per comments Let's not give up on this yet!
[xx yy] = meshgrid(1:5);
u = (rand(5)+1).^(rand(5)*10)*sign(randn(5));
v = (rand(5)+1).^(rand(5)*10)*sign(randn(5));
quiver(xx(:),yy(:),sign(u(:)).*log10(abs(u(:))),sign(u(:)).*log10(abs(v(:))))
2 Kommentare
Siehe auch
Kategorien
Mehr zu Vector Fields finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!