Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: Locator points not working in Manipulate calling RegionPlot, etc.

  • To: mathgroup at smc.vnet.net
  • Subject: [mg124399] Re: Locator points not working in Manipulate calling RegionPlot, etc.
  • From: Chris Young <cy56 at comcast.net>
  • Date: Wed, 18 Jan 2012 06:02:17 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jf12ue$5g6$1@smc.vnet.net> <jf3ka7$q7r$1@smc.vnet.net>

Thanks very much to Heike for the suggestion. Doing a parametric plot
of the whole triangular region (via two parameters, not just a line
plot via one parameter) tells Mathematica where to put the mesh much more
quickly than using RegionPlot, especially since it works fine with
PlotPoints set to 2, unlike RegionPlot. I wonder if this would
translate to a general polygon filling routine, though.

http://home.comcast.net/~cy56/ParametricTriHatch.nb
http://home.comcast.net/~cy56/ParametricTriHatchPIc1.png
http://home.comcast.net/~cy56/ParametricTriHatchPIc2.png
http://home.comcast.net/~cy56/ParametricTriHatchPIc3.png
http://home.comcast.net/~cy56/ParametricTriHatchPIc4.png

\[HorizontalLine]TriHatch3[A_, B_, C_, mesh_, light_, plotPts_,
  opts___] :=
 Module[
  {
   orient, (* the orientation of the triangle; counter-
   clockwise is positive *)
   N,             (* the projection,
   or "normal", from A onto BC *)
   base        (*
   the extended base, for spacing the hatch lines uniformly *)
   },

  orient =  Sign[Det[{B - A, C - A}]];
  N =            Projection[A - B, C - B] + B;
  base =     Max[Norm /@ {N - B, N - C, C - B}];

  ParametricPlot[
   u A + (1 - u) (v B + (1 - v) C),
   {u, 0, 1}, {v, 0, 1},

   PlotStyle -> None,

   Mesh ->                      Round[mesh * base, 1],
   MeshStyle ->
    If[orient > 0, Lighter[Green, light], Lighter[Red, light]],
   MeshFunctions -> {{x, y} \[Function] Det[{N - A, {x, y} - A}]},

   PlotPoints -> plotPts,
   BoundaryStyle -> None,
   Evaluate[opts]]
  ]

On 2012-01-17 10:59:19 +0000, Heike Gramberg said:

> The problem is that you have two Locator controls which messes things
> up. You could do something like this instead.
>
> Manipulate[
>  PolyHatch[pts[[;; 4]], pts[[-1]], mesh, lighter, plotPoints],
>  {{pts, {{1, 0}, {1, 1}, {2, 1}, {2, 0}, {0, 0}}}, Locator},
>  {{mesh, 20}, 1, 30},
>  {{lighter, .3}, 0, 1},
>  {{plotPoints, 15}, 10, 30, 1}]
>
> By the way, to make the manipulate less laggy you could use for example=

> ParametricPlot to plot the triangles instead of
> RegionPlot. For example, this produces the same result but is much more=

> responsive:
>
> TriHatch[P1_, P2_, P3_, mesh_, light_, plotPts_, opts___] :=
>  Module[{orient, qq },
>   orient = Sign[Det[{P2 - P1, P3 - P1}]];
>   qq = Projection[P1 - P2, P3 - P2] + P2;
>
>   ParametricPlot[
>    a P1 + (1 - a) (b P2 + (1 - b) P3), {a, 0, 1}, {b, 0, 1},
>    PlotStyle -> None,
>    Mesh -> Round[mesh Norm[P3 - P2], 1],
>    MeshStyle ->
>     If[orient > 0, Lighter[Green, light], Lighter[Red, light]],
>    MeshFunctions -> {Function[{x, y}, Det[{qq - P1, {x, y} - P1}]]},
>    PlotPoints -> plotPts,
>    BoundaryStyle -> None, Evaluate[opts]]
>   ]
>
> Manipulate[
>  PolyHatch[pts[[;; 4]], pts[[-1]], mesh, lighter, plotPoints],
>  {{pts, {{1, 0}, {1, 1}, {2, 1}, {2, 0}, {0, 0}}}, Locator},
>  {{mesh, 20}, 1, 30},
>  {{lighter, .3}, 0, 1},
>  {{plotPoints, 5}, 2, 20, 1}]
>
> (note that for ParametricPlot the number of PlotPoints can be as  small=

> as small as 2 whereas for RegionPlot you
> need at least 20 points for a reasonable plot).




  • Prev by Date: Re: without individual scaling?
  • Next by Date: Tips for writing correct, non trivial Mathematica Libraries
  • Previous by thread: Re: Locator points not working in Manipulate calling RegionPlot, etc.
  • Next by thread: How to coerce a string pattern to an ordinary pattern?