Re: updating a simulation within Manipulate.
- To: mathgroup at smc.vnet.net
- Subject: [mg130087] Re: updating a simulation within Manipulate.
- From: Waclaw Kusnierczyk <waku at idi.ntnu.no>
- Date: Fri, 8 Mar 2013 16:45:48 -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>
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
- References:
- updating a simulation within Manipulate.
- From: W Craig Carter <ccarter@MIT.EDU>
- updating a simulation within Manipulate.