Mathematica如何處理圖形顯示的雙緩衝?它是否自動完成?關於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來創建新的繪圖。很難做一個小例子,使用它在這裏發佈,所以在上面,我只是用Trigger代替。所以,在這種情況下我不能使用RefreshRate,因爲我現在沒有實際使用Trigger。
我在看不同的網頁,討論更新屏幕的這些問題,比如這個page等,這就是爲什麼我問。
這是我現在製作的一個CDF,用來製作一個雙擺的動畫,你可以看到,如果你使delta_t變大(這是ODE發現的數值解的每個區間的時間間隔),在屏幕上的動畫顯示有很多閃爍(或任何你喜歡使用的術語),問題是,要看眼睛並不容易,並且想要找到我能做的事情來防止這種情況發生。
這裏是CDF
您也可以使用鼠標來改變擺的位置看到更多閃爍的效果。
感謝您指出的刷新率,但它並不像我可以在我的當前實現,因爲我沒有使用觸發更多的是由於問題描述here
使用它,我想我只需要繼續現在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*)
....................
「更新」以上是由所述scheduledTask在每個TIME_INTERVAL更新變量的代碼的部分,其餘控制。
更新
我想我展示一個小程序,我看到也動畫在Java中的雙擺,我認爲它有一個比我做的閃爍要少得多,甚至當我在跑礦有關相同的速度。這裏是鏈接 http://www.myphysicslab.com/dbl_pendulum.html
所以,我想我還有更多的工作要做。我需要找到一種方法來減少這種閃爍效應。
用你的例子,在mma7上,我看不到閃爍本身。由於在每幀中移動的距離,動畫當然具有選通質量,並且還存在抖動,這大概是因爲幀速率不與屏幕的垂直刷新速率同步。你究竟關心什麼? –