I gave another shot for this problem, as someone who (at least currently) works with Mathematica 11.
If one wants to get control over the length of the arrows in VectorPlot
, the way to do it is call for the VectorScale
option with a slot:
VectorPlot[
{vx,vy},
{x,y}\[Element]reg,
VectorScale -> {Automatic, Automatic, #}]
& /@ {Function[Log10[#5]]}
The 5th slot is Norm[{fx,fy}]
. But as the documentation to Mathematica 11 tells:
When using an explicit sfun
, positive values are automatically scaled to lie between 0 and 1. For other values the vector is not drawn.
I.e. typing Log10
as I did wouldn't give good results in all cases. The correct scaling function for one's specific vector field and specific region of plotting is determined by the minimum value of Norm[{fx,fy}]
(the shortest arrow in the plot) and maximum of Norm[{fx,fy}]
(the longest arrow).
This makes the process of scaling vector field's arrows a task to ponder about each time drawing a vector field.
I guess that Mathematica 12's new VectorScale
arguments are designed to specifically skip and save you from all this math calculations.
The bottom line, as I see it, is not to fiddle with it the way I tried to, but rather to do it as @Gianluca Gorni did, tuck your vector field inside a scaling function.
Gianluca Gorni, thank you for your answer.