Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: tweaking VectorPlot...

  • To: mathgroup at smc.vnet.net
  • Subject: [mg111275] Re: tweaking VectorPlot...
  • From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
  • Date: Mon, 26 Jul 2010 06:36:09 -0400 (EDT)

Hi,

this is far away from being *clean*: Take a potential and calculate the
gradient. Combine DensityPlot and ContourPlot (or
LineIntegralConvolution with vectorlength coloring if you like) on the
potential. If it's an artificial student-example use an easy potential
which you solve explicitely in one variable. So you can choose your
points on the wanted level and use VectorPlot to visualize the vectors
only on the curve.

For the tails of the arrows I have no better idea then replacing:

<< VectorAnalysis`
pot = x^2 + x y - Sin[y^2]
f = -Most@Grad[pot, Cartesian[x, y, z]]

dp = Show[{DensityPlot[pot, {x, -3, 3}, {y, -3, 3}, 
    ColorFunction -> "TemperatureMap"], 
   ContourPlot[pot == 0.2, {x, -3, 3}, {y, -3, 3}, 
    ContourStyle -> {Thick, Black}]}];

ys = Table[y, {y, -4, 4, 6/40.}];
sol = Solve[pot == 2/10, x];
pts = Flatten[Table[{x, y} /. sol, {y, ys}], 1];

vp = VectorPlot[f, {x, -3, 3}, {y, -3, 3}, VectorPoints -> pts, 
   VectorScale -> 0.25, VectorStyle -> {Black, Arrowheads[0.02]}] /. 
  Arrow[{p1_, p2_}] :> Arrow[{p1 + (p2 - p1)/2, p2}];

Show[{dp, vp}]

Hope this gives you a starting point.

Cheers
Patrick

On Sun, 2010-07-25 at 01:57 -0400, J Davis wrote:
> Looking at this example in the documentation...
> 
> points = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}}; VectorPlot[{-1 - x^2 +
>    y, 1 + x - y^2}, {x, -2, 2}, {y, -2, 2}, VectorPoints -> points,
>  VectorScale -> .25,
>  Epilog -> {Red, PointSize[Medium], Point[points]}]
> 
> I would prefer for the *tail* of the vector to be situated at "points"
> rather than the tip (or as Mathematica draws them, the base of the
> arrowhead at the tip).
> 
> I was hoping there was an option I could call to VectorPlot to make
> the desired behavior happen but I don't find any.
> 
> Suggestions? Or do I need to manually translate all the vectors? I was
> hoping to avoid that since students would be utilizing the code and I
> want to keep it as clean and simple as possible.
> 
> Once I accomplish the task above, I was looking for a clean way to
> plot the level curves of a surface and then superimpose the gradient
> vector field---but here's the catch---where the only vectors shown
> were the ones along the level curves (meaning their *tails* are along
> the level curves). I tried RegionFunction but didn't get satisfactory
> results.
> 
> Any help is appreciated.
> 
> Thanks,
> John
> 
> 



  • Prev by Date: Re: Kolmogorov-Smirnov 2-sample test
  • Next by Date: Re: A question on plot3D
  • Previous by thread: tweaking VectorPlot...
  • Next by thread: Re: tweaking VectorPlot...