Re: Fixed Typo in Code---> Re: updating a simulation

• To: mathgroup at smc.vnet.net
• Subject: [mg130088] Re: Fixed Typo in Code---> Re: updating a simulation
• From: W Craig Carter <ccarter at MIT.EDU>
• Date: Fri, 8 Mar 2013 16:46:08 -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: <9C229A0A-D12F-4D3E-9B5F-7FA8B918CFE6@mit.edu> <20130308112243.0BE1B66BD@smc.vnet.net>

```Thanks Bob,
That's better.

I'm still surprised that is the cleanest way to do it.  What I wasn't
sure about is if that If[] is being called repeatedly if its argument is
Dynamic.  I think it is not because the the kernel and the FrontEnd
don't seem to be taxing the cpu.

Craig

W Craig Carter
Professor of Materials Science, MIT

On Mar 8, 13, at 6:22 AM, Bob Hanlon wrote:

> 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 at 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
>>>
>>>
>

```

• Prev by Date: Re: updating a simulation within Manipulate.
• Next by Date: Re: updating a simulation within Manipulate.
• Previous by thread: Re: Fixed Typo in Code---> Re: updating a simulation
• Next by thread: Numbers on rectangles