Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Topic: Fixed Typo in Code---> Re: updating a simulation within Manipulate.
Replies: 5   Last Post: Mar 9, 2013 5:25 AM

 Messages: [ Previous | Next ]
 W. Craig Carter Posts: 266 Registered: 9/10/05
Re: Fixed Typo in Code---> Re: updating a simulation
Posted: Mar 8, 2013 4:45 PM

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

>

Date Subject Author
3/7/13 W. Craig Carter
3/9/13 Nasser Abbasi
3/8/13 Bob Hanlon
3/8/13 W. Craig Carter