Re: Locator question
- To: mathgroup at smc.vnet.net
- Subject: [mg79501] Re: Locator question
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Sat, 28 Jul 2007 05:27:22 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <f86r55$pc7$1@smc.vnet.net> <200707250930.FAA26363@smc.vnet.net> <f89pve$5jn$1@smc.vnet.net> <46A8751F.8000907@gmail.com> <f8cfd5$2ue$1@smc.vnet.net>
Murray Eisenberg wrote: > Responses in-line below and at bottom.... > > Jean-Marc Gulliet wrote: >> Murray Eisenberg wrote: >>> I'd like to define a function that would do that, taking as argument >>> the function name, the interval on which to plot, and an optional >>> point at which to place the locator. >>> >>> Here are two attempts, each with unpleasant consequences... >>> >>> Attempt 1: >>> >>> trackPointOnPlot[f_, {a_, b_}, start_: {a, f[a]}] := >>> DynamicModule[{p = start}, >>> Column[{LocatorPane[Dynamic[p, (p = {First@#, f[First@#]}) &], >>> Plot[Sin[x], {x, a, b}]], Dynamic[p]}]] >>> >>> With a third argument supplied, this works OK, e.g.: >>> >>> trackPointOnPlot[Sin, {0, 10}, {Pi, Sin[Pi]}] >>> >>> However, if I evaluate, say, >>> >>> trackPointOnPlot[Sin,{0,10}] >>> >>> then the locator appears initially to the left of the x-axis. So I ask >>> whether that syntax on the left for trackPointOnPlot is legitimate? >>> That is, can the default value for variable 'start' refer legitimately >>> to the value of a preceding argument? >> [snip] >> >> Hi Murray, >> >> The short answer to your question is 'No'. You cannot refer to >> 'previous' patterns in your function declaration. The same restriction >> applies to initializations within *Module*, *With*, or *Block* >> constructs. For instance, one cannot expect correct result from, say, >> Module[{a = 1, b = 2, c = a + b}, somecode]. (Note that if a and/or b >> have also some global values, this is these values that are going to be >> taken at this stage for computing c.) A valid expression would be >> Module{{a = 1, b = 2, c}, c = a + b; somecode], expression that >> guarantee that c is equal to 3. (There is a discussion about that in the >> Mathematica Book, Section 2.7 "Modularity and the Naming of Things".) > > I was aware of the prohibition in the initializations in Module, etc., > but I did not recall having seen that mentioned with respect to the > arguments on the left side of a SetDelayed function definition. > > Can you point me to where in the Mathematica 6.0 documentation this > prohibition for function definitions is stated. (I can find it for > Module, etc.) Honestly, I have not the slightest idea where in the documentation center one could possibly find anything about that... I have to admit that most of the time I rely on memory and The Mathematica Book (as well as some other works) to find what I need. Only in last resort (or for learning the new graphic features) I will dig in the documentation center (This means that I do not use the full potential of version 6.0). > Actually, reference within the initializations of a Module is somewhat > muddier than first appears. Indeed, there's nothing wrong with: > > Module[{a = 1, b = 2, c = a + b}, c] > a+b > > (It's just that the assignment c = a + b refers to global a and global b > but, since there are no global values assigned to them, the values of a > and b are themselves.) The docs for 6.0 give an even more direct example: > > Module[{t = 6, u = t}, u^2] > > Now back to the topic at hand... >> Back to your function, the following modified version will work as you >> wanted (I hope!). >> >> trackPointOnPlot[f_, {a_, b_}, start_: {0, 0}] := >> DynamicModule[{p = If[start == {0, 0}, {a, f[a]}, start]}, >> Column[{LocatorPane[Dynamic[p, (p = {First@#, f[First@#]}) &], >> Plot[f[x], {x, a, b}]], Dynamic[p]}]] >> >> trackPointOnPlot[Cos, {0, 10}, {Pi, Cos[Pi]}] >> trackPointOnPlot[Sin, {0, 10}, {Pi, Sin[Pi]}] >> trackPointOnPlot[Cos, {0, 10}] >> trackPointOnPlot[Sin, {0, 10}] > > I don't think that does quite what I expect: E.g., if you evaluate > > trackPointOnPlot[Cos, {Pi, 10}, {0, 0}] > > then the locator starts NOT at the explicitly specified point {0,0}, but > instead at {Pi,f[Pi]}. And this is not an artifact of the plot > interval, since if in the Plot expression I insert AxesOrigin->{0,0}, > still the locator will be at {Pi,f[Pi]} instead of > >
- References:
- Re: Locator question
- From: Albert <awnl@arcor.net>
- Re: Locator question