3
$\begingroup$

enter image description here

Something like this happened when I was working with two Manipulate cells. I saved the notebook, duplicated it and only keep these two cells, and opened the notebook with a fresh kernel, it still happened immediately (in trusted directory, if not, this happens after clicking enable dynamics).

I have repeated this on Mathematica 10.1 on OS X 10.10.3 and Windows 8.1 (I am not able to open it in version 9).

So is it a bug, or an expected behaviour I am unaware of?

The code in the notebook is here:

First Cell:

Manipulate[
circle = ParametricPlot3D[{Sin[x], Cos[x], 0}, {x, -Pi, Pi}, 
PerformanceGoal -> "Quality"];
circle1 = First[circle];
circlebase = Scale[circle1, {1, 1, 1}, {0, 0, 0}];
fin = Table[
Translate[Rotate[{Point[{-1, 0, 0}]}, - i 4 Pi/1000, {0, 0, 1}], 
 2 {Sin[i 2 Pi/1000], Cos[i 2 Pi/1000], 0}], {i, step}];
circlerolled = 
Translate[circle1, 
2 {Sin[ 2 Pi step/1000], Cos[ 2 Pi step/1000], 0}]; 
Graphics3D[{fin, circlebase, circlerolled}, 
PlotRange -> {{-3.1, 3.1}, {-3.1, 3.1}, {-0.1, 0.1}}, 
ViewPoint -> {0, 0, 1}, Boxed -> False],
{step, 1, 1000}]

Second Cell:

Manipulate[
circle = ParametricPlot3D[{Sin[x], Cos[x], 0}, {x, -Pi, Pi}, 
PerformanceGoal -> "Quality"];
circle1 = First[circle];
circlebase = Scale[circle1, {-3, -3, -3}, {0, 0, 0}];
fin = Table[
Translate[
Rotate[Point[{-1, 0, 0}], - i 2 Pi/(251/(-2)), {0, 0, 1}], 
 -2 {Sin[i 2 Pi/251], Cos[i 2 Pi/251], 0}], {i, step}];
circlerolled = 
Translate[
circle1, (-3 + 1) {Sin[ 2 Pi step/251], Cos[ 2 Pi step/251], 0}]; 
Graphics3D[{fin, circlebase, circlerolled}, 
PlotRange -> {{-3, 3}, {-3, 3}, {-0.1, 0.1}}, 
ViewPoint -> {0, 0, 1}, Boxed -> False],
{step, 1, 251}]

The code itself should produce this after executing them separately.If you are not able to produce it, you may try to download my sample notebook.

https://drive.google.com/file/d/0B6gQp_HcIW0ZVmwyeUJHR0MtM0U/view?usp=sharing

I guarantee it is not malicious (anyway you can open it with a text editor and see the source code)

$\endgroup$
1

1 Answer 1

5
$\begingroup$

This infinite evaluation is the result of "cross-linking" the two Dynamic expressions due to the failure to localize your Symbols with DynamicModule, e.g.:

DynamicModule[{circle, circle1, circlebase, fin, circlerolled},
 Manipulate[
  circle = ParametricPlot3D[{Sin[x], Cos[x], 0}, {x, -Pi, Pi}, 
    PerformanceGoal -> "Quality"];
  circle1 = First[circle];
  circlebase = Scale[circle1, {1, 1, 1}, {0, 0, 0}];
  fin = Table[
    Translate[Rotate[{Point[{-1, 0, 0}]}, -i 4 Pi/1000, {0, 0, 1}], 
     2 {Sin[i 2 Pi/1000], Cos[i 2 Pi/1000], 0}], {i, step}];
  circlerolled = Translate[circle1, 2 {Sin[2 Pi step/1000], Cos[2 Pi step/1000], 0}];
  Graphics3D[{fin, circlebase, circlerolled}, 
   PlotRange -> {{-3.1, 3.1}, {-3.1, 3.1}, {-0.1, 0.1}}, ViewPoint -> {0, 0, 1}, 
   Boxed -> False], {step, 1, 1000}
 ]
]
  • step is automatically localized by Manipulate and does not need to be added to the DynamicModule specification.

  • This localization should be included for all Manipulate expressions unless you have specific need to access the values globally, and if you do you will need unique Symbol names.

$\endgroup$
3
  • $\begingroup$ Thank you, the problem is solved. After some more attempts, I found that only the conflict of "used" variables to display will cause the infinite evaluation. $\endgroup$
    – vapor
    Commented Apr 21, 2015 at 16:13
  • $\begingroup$ @Felix "used" meaning present in the display expression? You should still localize the other variables to prevent unwanted global interaction, IMHO. $\endgroup$
    – Mr.Wizard
    Commented Apr 21, 2015 at 16:15
  • $\begingroup$ Yeah, I inserted some unused conflict variables and this didn't happen. But I know it is a bad habit now and I will localize my variables. Thanks:) $\endgroup$
    – vapor
    Commented Apr 21, 2015 at 16:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.