Date: Mar 8, 2013 6:21 AM Author: Bob Hanlon Subject: Re: Fixed Typo in Code---> Re: updating a simulation Use of If structure seems reasonable. Recommend that you use a

separate color for the latest point/disk so that the current position

is evident. Other minor changes made.

randomStep[bias_, stepList_] :=

Module[

{angle = RandomVariate[

NormalDistribution[bias, 1]]},

Join[stepList,

{Last[stepList] + {Cos[angle], Sin[angle]}}]];

walkerGraphic[stepList_, range_] :=

Graphics[{

Gray,

PointSize[.04],

Point@Most@stepList,

Blue,

Point@Last@stepList},

PlotRange -> range {{-1, 1}, {-1, 1}}];

DynamicModule[{walkerPath = {{0, 0}}},

Manipulate[

If[keepWalking,

walkerPath = randomStep[bias, walkerPath]];

walkerGraphic[walkerPath, range],

Row[{

Control[

{{keepWalking, False, "Keep Walking"},

{True, False}}],

Spacer[20],

Button["Reset",

reset = False;

keepWalking = False;

walkerPath = {{0, 0}},

ImageSize -> Tiny,

BaseStyle -> {8}]

}],

Delimiter,

{{range, 20, "Range"}, 0, 100},

{{bias, 0, "Bias"}, -Pi, Pi,

AngularGauge[##, ImageSize -> 160,

ScaleOrigin -> {{-4 Pi, 4 Pi}, 1}] &}]]

Bob Hanlon

On Thu, Mar 7, 2013 at 10:47 PM, W Craig Carter <ccarter@mit.edu> wrote:

> On previous message, there is a typo in the example code, please use this instead:

>

> 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},

> {{bias, 0}, -Pi, Pi,

> AngularGauge[##, ImageSize -> 160,

> ScaleOrigin -> {{-4 Pi, 4 Pi}, 1}] &}]]

>

>

>

> W Craig Carter

> Professor of Materials Science, MIT

>

>

>

> On Mar 7, 13, at 17:16 PM, 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

>>

>>