how to limit arrow length in 3D quiver plot?
13 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuesta aceptada
Más respuestas (2)
Matt Kindig
el 5 de Abr. de 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 comentarios
Matt Kindig
el 5 de Abr. de 2012
Ah, yes it would. My apologies. You should normalize by the maximum of Ln, rather than Ln itself.
Sean de Wolski
el 5 de Abr. de 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 comentarios
Ver también
Categorías
Más información sobre Vector Fields en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!