Re: ScaleFunction vs. ScaleFactor

*To*: mathgroup at smc.vnet.net*Subject*: [mg81572] Re: ScaleFunction vs. ScaleFactor*From*: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>*Date*: Fri, 28 Sep 2007 02:08:16 -0400 (EDT)*Organization*: The Open University, Milton Keynes, UK*References*: <fddfkq$a88$1@smc.vnet.net>

olalla wrote: > I am using the ListPlotVectorField to plot a list of 2d-vectors > (vx,vy) at given points(x,y) but I'm in trouble with controling the > size of the head of the arrow and the relative size of the vectors. I > think that the problem is in the ScaleFunction and ScaleFactor > commands but I do not understand how to use them properly. First, note that the functions ScaleFunction, MaxArrowLength, and ScaleFactor are applied in turn to the vectors in that order. By default (value set to None or Automatic), ScaleFunction does nothing. If a user defined function is supplied, it is then applied to the whole set of vector. For instance, ScaleFunction -> (0.5 # &) tells Mathematica to divide the magnitude of every vector by two, whereas ScaleFunction -> (2 # &) doubles the magnitude of every vectors. Then, MaxArroLength is applied. By default it does nothing to the set of vectors, but if the user provided a constant value, say 0.5, any vector with magnitude greater than this constant value will not be displayed. Finally, ScaleFactor is applied to the remaining set of vectors. ScaleFactor resizes the vectors according to the constant value provided as parameter and it does so according to the vector of largest magnitude. That is, the largest magnitude is taken as being the unit length and all other magnitudes are rescale according to it and the constant value provided by the user. In other words, ScaleFunction is applied first and does an absolute scaling, then the remaining vectors are filtered according to the size of their magnitudes, and finally, ScaleFactor does a relative resizing. Needs["Graphics`PlotField`"] varray = Table[{Random[Real, {-0.7, 0.7}], Random[Real, {-0.7, 0.7}]}, {i, 10}, {j, 10}]; ListPlotVectorField[varray] ListPlotVectorField[varray, ScaleFunction -> (0.5# &)]; ListPlotVectorField[varray, ScaleFunction -> (2# &)]; ListPlotVectorField[varray, MaxArrowLength -> 0.5]; ListPlotVectorField[varray, ScaleFactor -> 2]; I hope this is shedding more light on the subject than obscuring it. -- Jean-Marc