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
>>>
>>>
>
- References:
- Re: Fixed Typo in Code---> Re: updating a simulation
- From: Bob Hanlon <hanlonr357@gmail.com>
- Re: Fixed Typo in Code---> Re: updating a simulation