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?