2011-09-02 89 views
4

专家更新,问题和操纵表达

我不能找出为什么操纵表达正被评估每次我点击“StepRightButton”,这是一个触发控制的一部分的2倍。

当我点击'+'按钮时,我发现计数器按预期增加了一次,但表达式正在评估2次,而不是预期的一次。这里是一个小例子

Manipulate[ 

Show[ 
[email protected]@Row[{currentTime," ",Date[]}], 
Plot[Sin[x],{x,-Pi,Pi}] 
], 

Control[{{currentTime,0,Style["run",10]},0,100,0.1, 
     ControlType->Trigger,DisplayAllSteps->True,ImageSize->Tiny, 
     AnimationRate->Automatic,AnimationRepetitions->0, 
     AppearanceElements->{"PlayButton","PauseButton","StepRightButton","ResetButton"}} 
], 

ContinuousAction->False, 
SynchronousUpdating->False 

] 

再次,点击“+”表示“currentTime的”变量被增加了正确的量(0.1在本例中)。但是我的问题是,为什么表达式会被证据显示两次,每次点击'+'按钮都会看到Date []打印增加2次。

这会导致我的问题,因为我假设表达式会每'tick'评估一次。

这是一种确保每次点击“+”一次后评估表达式的方法吗?

感谢,

回答

7

这可以通过添加选项PerformanceGoal -> "Quality"Plot功能来解决。

在显示操作项目的过程中,可以根据PerformanceGoal设置显示对象的低保真度样本。必要时,在操作结束时绘制更高的逼真版本。这是后来重绘,这似乎是在这里造成的问题。

+0

非常好!我不知道有什么叫做“如果有必要,在操纵结束时画出更高的逼真度”。我从来没有听说过这样的事情。我认为有一些动态或时间问题,但不是我能看到的。这些东西是否记录在某处?这是否仅适用于绘图?谢谢! – Nasser

+0

在tutorial/AdvancedDynamicFunctionality中有这方面的内容。请参阅'ControlActive' –

+2

@Nasser ...并且不要忘记'PerformanceGoal'和'$ PerformanceGoal'的文档页面。在后者中,您会发现:* $ PerformanceGoal的典型默认值是ControlActive [“Speed”,“Quality”]。* –