How to get scale and coordinates from quiver function?
11 次查看(过去 30 天)
显示 更早的评论
Let's say I create a quiver plot with X, Y, U and V. If we think in the sense of particles, consider 'n' number of particles that particles have location [X,Y] and corresponding velocities [U, V]. The result from using 'quiver' function is, I get a vector plot that has vectors indicating direction and magnitude of particle displacement. This means that the particles have new locations [X1, Y1]. Is there a way to get this new location data?
I have checked the "get(hQ, 'Xdata')", function that gets me the original data that I have provided to the 'quiver' function, but I could not find the updated location data as inferred from the quiver plots.
I also, understand that scaling the arrows can have an impact on the new locations [X1, Y1]. But, that can not be a concern as of now. Any help is appreciated. Thanks in advance.
0 个评论
采纳的回答
Adam Danz
2023-1-8
编辑:Adam Danz
2024-4-26
> the particles have new locations [X1, Y1]. Is there a way to get this new location data?
If you already have the X, Y, U and V values, then the new location is
xnew = x+u;
ynew = y+v;
However, unless scaling is turned off, the head of the quiver arrows will likely not be at [xnew, ynew] because quiver internally scales the magnitude of the arrows so they all fit nicely in the axes. Here are two solutions.
Example: turn off scaling
x = rand(1,20)*20 - 10;
y = rand(1,20)*10 + 40;
u = rand(1,20)*6 - 3;
v = rand(1,20)*10 - 5;
quiver(x,y,u,v,'off')
x1 = x + u;
y1 = y + v;
hold on
plot(x, y, 'bo') % mark arrow tail
plot(x1, y1, 'rs') % mark arrow head
Example: Use the ScaleFactor property (R024a)
Starting in R2024a, the quiver object returned by quiver contains a read-only ScaleFactor property that can be used to compute the magnitudes of the quiver arrows whether auto scaling is turned on or off. Multiply U and V by the scale factor to get the horizontal and vertical distance between the arrow tails and arrow heads.
figure()
h = quiver(x,y,u,v);
h.ScaleFactor
x1 = x + h.ScaleFactor*u;
y1 = y + h.ScaleFactor*v;
hold on
plot(x, y, 'bo') % mark arrow tail
plot(x1, y1, 'rs')
6 个评论
Adam Danz
2024-4-26
I've updated my answer to include a new solution available in R2024a using the ScaleFactor property.
更多回答(1 个)
MJFcoNaN
2023-1-8
Hello,
The vector field is instantaneous, therefore, you have to provide the increment of time for getting a new proximate location. Or you can calculate it from a time series of vector fields.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Vector Fields 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!