Mathematica 如何处理图形显示的双缓冲?它是自动完成的吗?
我问的原因是,当我做一些动画时,根据动画速率,我注意到在屏幕上更新图形时烦人的闪烁。当我放慢速度时,我可以减少这个。
我将在下面展示一个简单的示例来说明我的意思,并询问专家是否对如何减少所显示的闪烁有建议。
此示例围绕圆绘制一个点。当动画运行时,您会注意到闪烁。即球的运动不平滑。减慢速率时,闪烁会减少。但是我觉得应该有远离来减少闪烁即使率很高的东西?
Manipulate[
(
pt = {Cos[n], Sin[n]};
Graphics[
{
{Blue, Thickness[0.01], Line[{{0, 0}, pt}]},
{PointSize[.08], Red, Point[pt]}
}, PlotRange -> {{-1.5, 1.5}, {-1.5, 1.5}}, ImageSize -> 200]
),
Control[{{n, 0, "Run"}, 0, 1000, ControlType -> Trigger,
DisplayAllSteps -> True, ImageSize -> Tiny, AnimationRate -> 1,
AppearanceElements -> {"ProgressSlider", "ResetPlayButton",
"PauseButton", "StepLeftButton", "StepRightButton",
"ResetButton", "FasterSlowerButtons"}}],
SynchronousUpdating -> True
]
所以我的问题是:事情应该是这样的吗?或者是否有技巧和提示可以使动画更新运行更顺畅(减少闪烁),即使速率未设置为“最佳”,Mathematica 是否在内部使用双缓冲来更新图形?
我在 Windows 7、64 位上使用 V 8.0.1。
谢谢
更新 1 我想我的问题可能没有很好地提出。由于我没有直接使用 Animate,所以不能责怪 Mathematica。我现在正在使用 RunScheduledTask[] 来更新计时器,并且在每个计时器实例中,我在 Graphics 中制作新的绘图。很难用它在这里发布一个小例子,所以在上面,我只是使用了触发器。因此,在这种情况下我不能使用 RefreshRate,因为我现在实际上并没有使用 Trigger。
我正在查看讨论这些更新屏幕问题的不同网页,例如此页面和其他页面,这就是我问的原因。
这是我现在正在制作的 CDF,用于制作双摆动画,您可以看到,如果您将 delta_t 设为大(这是找到 ODE 的数值解的每个间隔之间的时间),动画显示在屏幕有很多闪烁(或您喜欢使用的任何术语),关键是,它不容易在眼睛上看到,并且想找到我可以做些什么来防止这种情况。
这是CDF
您也可以使用鼠标改变钟摆的位置,以查看更多闪烁的效果。
感谢您指出 RefreshRate,但看起来我不能在当前的实现中使用它,因为由于此处描述的问题,我不再使用 Trigger
我想我现在只需要保持 delta_t 很小。
更新 2
这是我用来更新图形的代码部分
.......
Dynamic[Refresh[Graphics[
{
Line[{{0, 0}, bob1}],
Line[{bob1, bob2}],
{PointSize[.05], Red, Point[bob1]},
{PointSize[.05], Red, Point[bob2]}
}, graphicsOptions
], TrackedSymbols -> {update}, UpdateInterval -> v]]
(*updateInterval does not help with flicker*)
....................
上面的“更新”是由 scheduleTask 在我控制的每个 time_interval 更新的变量。
更新
我想我展示了一个我看到的小程序,它也在 Java 中为双摆设置动画,我认为它的闪烁比我做的要少得多,即使我以大致相同的速度运行我的程序也是如此。这是链接 http://www.myphysicslab.com/dbl_pendulum.html
所以,我想我还有很多工作要做。我需要找到一种方法来减少这种闪烁效果。