2012-08-12 152 views
2

我正在使用動畫包繪製參數曲線爲 $ x = sin(t)$和$ y = sin(t)^ 2 $以及跟蹤曲線的圓圈,使用以下代碼:r動畫,參數曲線

require(animation) 
x <- seq(-1,1,length=20) 
y <- x^2 
plot(x,y,type="l") 
library(animation) 
ani.record(reset=TRUE) 
t <- seq(0,4*pi,by=pi/30) 
for (i in 1:length(t)) { 
    points(sin(t[i]),sin(t[i])^2,pch=19,cex=2) 
    ani.record() 
    plot(x,y,type="l") # I have a question in this line 
} 
ani.replay() 

它的工作原理(請複製並粘貼此代碼)但記錄需要相當長的時間。這是一個簡單的曲線,但我應該想要 做複雜的一個,它會花費太多時間來完成錄製動畫。 我可以改進的一件事就是不要使用第二個繪圖函數來重新繪製parobola以擺脫出現在前一個繪圖中的圓圈。 有什麼我可以做得更好?

回答

2

鹼基r包grDevices有兩個功能,其允許一個情節的保存和重放,設計用於的情況是這樣的:

  • recordPlot()
  • replayPlot()

甲有些主觀測試在我的機器上似乎表明它比重​​新繪製整個繪圖更快:

require(animation) 
x <- seq(-1,1,length=20) 
y <- x^2 
plot(x,y,type="l") 
oopts <- ani.opts(interval=0.25) 
p <- recordPlot() # <== Record plot here ============= 
ani.record(reset=TRUE) 
t <- seq(0,4*pi,by=pi/30) 

for (i in 1:length(t)) { 
    replayPlot(p)  # <== Replay plot here ============= 
    points(sin(t[i]),sin(t[i])^2,pch=19,cex=2) 
} 
ani.replay() 
+0

只是一個說明:我認爲'recordPlot'來自'grDevices',否則:+1 :) – daroczig 2012-08-12 05:53:51

+0

@daroczig謝謝你的糾正。我相應地編輯了答案。 – Andrie 2012-08-12 09:42:27

+0

非常感謝。我真的不知道這是否讓它更快。有沒有任何理由讓它更快? – Ikuyasu 2012-08-13 01:00:53