2

アニメーションパッケージを使用して、次のコードを使用して曲線をトレースする円とともに、$ x = sin(t)$および$ y = sin(t)^2$のパラメトリック曲線をプロットしています。

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()

動作しますが(このコードをコピーして貼り付けてください)、録音にはかなりの時間がかかります。これは単純な曲線ですが、複雑な曲線を作成したい場合は、アニメーションの記録を完了するのに時間がかかりすぎます。これを改善できることの1つは、2番目のプロット関数を使用して放物線を再描画し、前のプロットに表示された円を削除しないことです。私がそれをより良くすることができる何かがありますか?

4

1 に答える 1

2

ベース R パッケージgrDevicesには、次のような状況向けに設計された、プロットの保存と再生を可能にする 2 つの関数があります。

  • 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()
于 2012-08-12T04:00:25.820 に答える