       Re: Using an locator and Rotating 3D graphics

• To: mathgroup at smc.vnet.net
• Subject: [mg92581] Re: Using an locator and Rotating 3D graphics
• From: "David Park" <djmpark at comcast.net>
• Date: Tue, 7 Oct 2008 07:03:32 -0400 (EDT)
• References: <gccheo\$s5t\$1@smc.vnet.net>

```Manipulate is like a set-piece dynamic display. It tries to be very versitle
but for most custom dynamic presentations it becomes a pain-in-the-neck. It
is better to learn how to construct your own dynamic presentations. Here is
more direct code for your display:

Module[
{pt1 = {1, 0}, pt2 = {0, 1}},
Row[{
Graphics[
{Dynamic@Arrow[{pt1, pt2}],
Locator[Dynamic[pt1]],
Locator[Dynamic[pt2]]},
PlotRange -> 2,
ImageSize -> 200],
Dynamic@
ParametricPlot3D[{Part[pt2 - pt1, 1] Cos[u],
Part[pt2 - pt1, 2]  Sin[u], u}, {u, 0, 4 Pi},
PlotRange -> {{-2, 2}, {-2, 2}},
ColorFunction -> Function[{x, y, z, u}, Hue[u]],
PlotStyle -> Thick,
ImageSize -> 350,
BoxRatios -> {1, 1, 1}]}]
]

You could use DynamicModule, but it really isn't necessary here. The
Locators are confined to the lhs plot and not imposed on the entire display.
In the code above I bypassed calculating the v variable you used.  Let's
reintroduce v. Quite often we might have a set of primary dynamic variables,
such as pt1 and pt2 here, which are manipulated by the mouse or sliders or
other dynamic elements, and a set of dependent dynamic variables that depend
on the primary variables, such as v here. We can handle this situation as in
the following code. Here we use the two argument form of Dynamic and when a
primary dynamic variable is adjusted the routine calcAll is called to
calculate all the dependent quantities (only v in this case). I've also made
some stylistic changes to the display.

Module[
{(* Primary dynamic variables *)
pt1 = {1, 0}, pt2 = {0, 1},
(* Dependent dynamic variable *)
v,
(* Other variables *)
calcAll},

calcAll[p1_, p2_] := (v = p2 - p1);

(* Initialize dependent variables *)
calcAll[pt1, pt2];

(* Display *)
Panel[
Row[{
Graphics[
Dynamic@Arrow[{pt1, pt2}],
Locator[Dynamic[pt1, (pt1 = #; calcAll[pt1, pt2]) &],
Graphics[{AbsolutePointSize, Point[{0, 0}]},
ImageSize -> 10]],
Locator[Dynamic[pt2, (pt2 = #; calcAll[pt1, pt2]) &], None]},
PlotRange -> 2,
ImageSize -> 200],
Dynamic@
ParametricPlot3D[{v[] Cos[u], v[]  Sin[u], u}, {u, 0,
4 Pi}, PlotRange -> {{-2, 2}, {-2, 2}},
ColorFunction -> Function[{x, y, z, u}, Hue[u]],
PlotStyle -> Thick,
Axes -> False,
SphericalRegion -> True, RotationAction -> Clip,
ImageSize -> 350,
Boxed -> False,
BoxRatios -> {1, 1, 1}]}],
Style["Custom Dynamics", 16]]
]

--
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/

"KB" <KennethLeeBaker at gmail.com> wrote in message
news:gccheo\$s5t\$1 at smc.vnet.net...
> When I try to use locators as inputs to 3D graphics, I end up not
> being able to rotate 3d graphics.  Clicking on the graphic moves the
> nearest locator rather than the graphic.  Switching to a collection of
> 2D sliders works in a pinch, but does not achieve the desired effect.
> Here is an example:
>
> Manipulate[v = pt2 - pt1;
> {Graphics[Arrow[{pt1, pt2}], PlotRange -> 2],
>  ParametricPlot3D[{v[] Cos[u], v[] Sin[u], u}, {u, 0, 4 Pi},
>   PlotRange -> {{-2, 2}, {-2, 2}},
>   ColorFunction -> Function[{x, y, z, u}, Hue[u]],
>   PlotStyle -> Thick]}, {{pt1, {0, 1}}, Locator},   {{pt2, {1, 0}},
>  Locator}]
>
>
> Any ideas?
>

```

• Prev by Date: Re: integration
• Next by Date: Re: an interesting problem of supplying boundary condition for a
• Previous by thread: Using an locator and Rotating 3D graphics
• Next by thread: Why is Mathematica assuming k==l and how do I make it not to?