[Date Index]
[Thread Index]
[Author Index]
Re: updating a simulation within Manipulate.
*To*: mathgroup at smc.vnet.net
*Subject*: [mg130089] Re: updating a simulation within Manipulate.
*From*: W Craig Carter <ccarter at MIT.EDU>
*Date*: Fri, 8 Mar 2013 16:46:28 -0500 (EST)
*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com
*Delivered-to*: l-mathgroup@wolfram.com
*Delivered-to*: mathgroup-newout@smc.vnet.net
*Delivered-to*: mathgroup-newsend@smc.vnet.net
*References*: <20130308035142.51AD66799@smc.vnet.net> <5139E091.8000909@idi.ntnu.no>
Thanks Waclwaw,
That is informative; I'm going to have to read the docs about ScheduledTask[]s.
My "real" example is quite a bit more involved---I have a Manipulate buried inside a Manipulate. I am not looking at random walks per se, but that was an example I cooked up which was simple enough to illustrate my question. I think this is the preferred method for asking questions in the group? (As long as one doesn't make the silly typos that I am prone to..).
Thanks, Craig
W Craig Carter
Professor of Materials Science, MIT
On Mar 8, 13, at 7:58 AM, Waclaw Kusnierczyk wrote:
> Hi Craig,
>
> Looks like you want to dynamically show the progress of a random walk. Rather than directly modify your solution, I'd suggest to have a look at an alternative using scheduled tasks and buttons.
>
> An example of random walk code:
>
> step[bias_] :=
> Through[{Cos, Sin}[RandomVariate[NormalDistribution[bias, 1]]]]
> next[state_, bias_] :=
> state + step[bias]
> extend[path_, bias_] :=
> Append[path, next[Last@path, bias]]
>
> An example of random walk plot code:
>
> show[path_] :=
> Show[
> ListLinePlot[path,
> PlotMarkers -> {Graphics[Circle[{0, 0}, 1]], 0.015},
> Axes -> None,
> AspectRatio -> 1,
> PlotRange -> {{-10, 10}, {-10, 10}}],
> Graphics[{Red, Point[Last@path]}]]
>
> An example of dynamic random walk plot:
>
> Module[{path = {{0, 0}}, walk, bias = 0},
> Manipulate[
> show[path],
> Column@{
> Row@{
> Button["start", Quiet@RemoveScheduledTask@walk;
> walk = RunScheduledTask[path = extend[path, bias], 0.5]],
> Button["stop", StopScheduledTask[walk]],
> Button["reset", path = {{0, 0}}]},
> AngularGauge[Dynamic@bias, {-\[Pi], \[Pi]},
> ScaleOrigin -> {-\[Pi], \[Pi]}]}]]
>
> Best,
> vQ
>
>
> On 03/08/2013 04:51 AM, W Craig Carter wrote:
>>
>> I *think* I've asked this question before, but I can't find it on mathgroup. In any case, I don't know the answer now.
>>
>> Here is a simple example of a Manipulate that updates a graphic as long as a boolean is true. This method seems like a kludge to me---is it? If so, what would be a better way to do this.
>>
>> This is a constructed example, the real case I am looking at is much more involved; but kudos to anyone who can make a reasonable facsimile of their signature by adjusting the random walker's bias....
>>
>> randomStep[bias_, stepList_] :=
>> Module[{angle = RandomVariate[NormalDistribution[bias, 1]]},
>> Join[stepList, {Last[stepList] + {Cos[angle], Sin[angle]}}]]
>>
>> walkerGraphic[stepList_, range_] :=
>> Graphics[GraphicsComplex[stepList, Disk /@ Range[Length[stepList]]],
>> PlotRange -> range {{-1, 1}, {-1, 1}}]
>>
>> DynamicModule[
>> {walkerPath = {{0, 0}}},
>> Manipulate[
>> If[keepWalking, (* kludge warning---testing for If[True...] seems inefficient *)
>> walkerPath = randomStep[bias, walkerPath]
>> ];
>> If[reset,
>> reset = False; keepWalking = False;
>> walkerPath = {{0, 0}}
>> ];
>> walkerGraphic[walkerPath, range],
>> {{keepWalking, False}, {True, False}},
>> {{reset, False}, {True, False}},
>> Delimiter,
>> {{range, 20}, 0, 100},
>> {{a, 0}, -Pi, Pi,
>> AngularGauge[##, ImageSize -> 160 ,
>> ScaleOrigin -> {{-4 Pi, 4 Pi}, 1}] &}
>> ]
>> ]
>>
>>
>>
>> W Craig Carter
>> Professor of Materials Science, MIT
>
Prev by Date:
**Re: Fixed Typo in Code---> Re: updating a simulation**
Next by Date:
**Re: updating a simulation within Manipulate.**
Previous by thread:
**Re: updating a simulation within Manipulate.**
Next by thread:
**Re: updating a simulation within Manipulate.**
| |