|
[Date Index]
[Thread Index]
[Author Index]
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?
|