Re: Curve Tracking and fetching Locator coordinates

• To: mathgroup at smc.vnet.net
• Subject: [mg119553] Re: Curve Tracking and fetching Locator coordinates
• From: Heike Gramberg <heike.gramberg at gmail.com>
• Date: Thu, 9 Jun 2011 05:45:28 -0400 (EDT)
• References: <201106081115.HAA23744@smc.vnet.net>

```This should work, and only requires a small modification of the original
solution

f[x_] := Sin[x] Exp[-x];

alongTheCurve3[xMin_, xMax_] :=
DynamicModule[{pt = {xMin,
f[xMin]}},(*The Plot and the Locator are combined by Show*)

Show[{
Plot[f[x], {x, xMin, xMax},
Epilog ->
Inset[Style[Dynamic[pt, (pt = {#[[1]], f[#[[1]]]}) &], Red,
14], Scaled[{0.8, 0.8}]]],
Graphics[Locator[Dynamic[pt, (pt = {#[[1]], f[#[[1]]]}) &]]]}]];

alongTheCurve3[0, 2 \[Pi]]

Heike

On 8 Jun 2011, at 12:15, Alexei Boulbitch wrote:

> You are right, Murray, so get I. I should admit that I do not
understand, how to get rid of it. I have a further problem here.
> I do not see how to force the function alongTheCurve to understand an
arbitrary function f that is different from Sin[x] or
> Cos[x] or alike. Say, such as a combination of seceral elementary
functions as Sin{x]*Exp[-x].
>
> Of coarse, all problems (except for messages) are removed at once, if
the function Sin{x]*Exp[-x] is typed-in manually.
> For example, check this:
>
>
> alongTheCurve2[xMin_, xMax_] :=
>   DynamicModule[{pt = {xMin, Sin[xMin]*Exp[-xMin]}},
>
> (*The Plot and the Locator are combined by Show*)
>
>    Show[{(*Here is the plot of your curve*)
>      Plot[Sin[x] Exp[-x], {x, xMin,
>        xMax},
> (*This is the inset into the plot showing the locator \
> value*)
> Epilog ->
>        Inset[Style[Dynamic[{pt[[1]], Sin[pt[[1]]]*Exp[-pt[[1]]]}],
>          Red, 14], Scaled[{0.8, 0.8}]]],
>
>      (*This part draws the locator*)
>
>      Graphics[ Locator[Dynamic[{pt[[1]], Sin[pt[[1]]]*Exp[-pt[[1]]]}
>
\
>         ]
>                                                             ]
>                                         ]
>            }]
>                           ];
>
> alongTheCurve2[0, 2 \[Pi]]
>
>
> But typing this in each time is too boring. The messages here state
that the tag Times in Dynamic[{pt[[1]], Sin[pt[[1]]]*Exp[-pt[[1]]]}]
> is protected.
>
> Alexei
>
>
>
>
>
> With that code and, say, the example alongTheCurve[Sin, 0, 2 \[Pi]],
as
> I move the locator, I get a huge list of messages generated, all of
the
> form "Set::write : Tag Sin in Sin[xxxxx] is Protected."
>
> On 6/6/2011 6:24 AM, Alexei Boulbitch wrote:
>> This is straightforward. If your Locator coordinates are denoted as
pt, and a function along which you want to move the Locator is f[x],
then you simply need to use the construction:
>>
>> Locator[Dynamic[{pt[[1]], f[pt[[1]]]
>>                  }
>>                 ]
>>         ]
>>
>> The function entitled "alongTheCurve" plots a curve f[x] from xMin to
xMax and the locator slides along this curve. The value of locator can
be seen in the upper right corner of the plot:
>>
>> alongTheCurve[f_, xMin_, xMax_] :=
>>    DynamicModule[{pt = {xMin, f[xMin]}},
>>     (* The Plot and the Locator are combined by Show *)
>>     Show[{
>> (* Here is the plot of your curve *)
>> Plot[f[x], {x, xMin, xMax},
>>
>> (* This is the inset into the plot showing the locator value *)
>>        Epilog ->
>>         Inset[Style[Dynamic[{pt[[1]], f[pt[[1]]]}], Red, 14],
>>          Scaled[{0.8, 0.8}]]],
>>
>> (* This part draws the locator *)
>>       Graphics[Locator[Dynamic[{pt[[1]], f[pt[[1]]]}]]]
>>       }]
>>     ];
>>
>> Try this:
>> alongTheCurve[Sin, 0, 2 \[Pi]]
>> alongTheCurve[Cos, 0, 2 \[Pi]]
>>
>> This function will not work in case you give it the combination of
the functions like
>> alongTheCurve[Sin+Cos, 0, 2 \[Pi]]
>>
>> Anyway, my aim is not to give a general solution, but only to show
>>
>> Have fun, Alexei
>>
>>
>> Hello, I'm trying to figure out how to constrain a locator's movement
along
>> a curve, but then fetch the coordinates of the locator to use in a
>> calculation.
>>
>> The documentation has an example of a Locator moving along a circle,
but
>> it's strange, because the way they do it using Normalize seems to
make it
>> not clear how to access the coordinates of the locator.
>>
>> This is the example code from the Locator documentation:
>>
>> DynamicModule[{pt = {1, 0}},
>>   Graphics[{Circle[], Locator[Dynamic[pt, (pt = Normalize[#])&]]},
>>    PlotRange ->   2]]
>>
>> I'm guessing the normalize function is being applied to the locator
>> position, and turning it into a unit vector (not entirely clear on
how that
>> works in the code though). That has the effect of tracking the
locator on a
>> unit circe But there is no variable for the locator positon. pt is
simply a
>> list of constants {1,0} (although, I don't understand that entirely
either,
>> because it also appears to be set to simply being a Normalize
function)
>>
>> Anyway, if someone could give me a hint as to what is going on in
that code
>> I would much appreciate it (documentation seems sparse on the
locator)
>>
>> Barring that could someone just give me a quick hack for fetching the
>> locator's coordinates when it is being tracked along a circle (or
better yet
>> if it is being tracked along an arbitrary curve.)?
>>
>> Admittedly I have a foggy grasp about how Dynamic modules work, I'm
able to
>> do basic stuff, but it starts to get unwieldy if I branch out.
>>
>> Thank you for any help :)
>>
>>
>
> --
> Murray Eisenberg                     murray at math.umass.edu
> Mathematics&  Statistics Dept.
> Lederle Graduate Research Tower      phone 413 549-1020 (H)
> University of Massachusetts                413 545-2859 (W)
> 710 North Pleasant Street            fax   413 545-1801
> Amherst, MA 01003-9305
>
>
> --
> Alexei Boulbitch, Dr. habil.
> Senior Scientist
> Material Development
>
> IEE S.A.
> ZAE Weiergewan
> 11, rue Edmond Reuter
> L-5326 CONTERN
> Luxembourg
>
> Tel: +352 2454 2566
> Fax: +352 2454 3566
> Mobile: +49 (0) 151 52 40 66 44
>
> e-mail: alexei.boulbitch at iee.lu
>
> www.iee.lu
>
> --
>
> This e-mail may contain trade secrets or privileged, undisclosed or
> otherwise confidential information. If you are not the intended
> recipient and have received this e-mail in error, you are hereby
> notified that any review, copying or distribution of it is strictly
> prohibited. Please inform us immediately and destroy the original