2017-05-05 33 views
1

我通過比較新的文檔工作陰謀頁是執行的情節「複雜」旋轉動畫下面的代碼示例:需要幫助使用par3dinterp和playwidget旋轉使用RGL R中

M <- r3dDefaults$userMatrix fn <- par3dinterp(time = (0:2)*0.75, userMatrix = list(M, rotate3d(M, pi/2, 1, 0, 0), rotate3d(M, pi/2, 0, 1, 0))) rglwidget() %>% playwidget(par3dinterpControl(fn, 0, 3, steps=15), step = 0.01, loop = TRUE, rate = 0.5)

我想要做的事情簡單得多 - 以恆定的速度,但我的腦袋,繞Z軸的情節似乎缺少關於時間規範的基本內容價值函數評估....我可以得到它旋轉部分的方式圓360degress然後回擺,但不會繼續前進...請幫助。

在此先感謝亞歷克斯

[我的東西想的排列像下面....

M <- r3dDefaults$userMatrix fn <- par3dinterp(time = 0:3, userMatrix = list(M, rotate3d(M, pi/2, 0, 0, 1), rotate3d(M, pi, 0, 0, 1), M)) rglwidget() %>% playwidget(par3dinterpControl(fn, 0, 2, steps=15), step = 0.01, loop = TRUE) ]

回答

1

對於簡單的旋轉,使用spin3d()而非par3dinterp()。 (你應該可以使用後者,但是正如你所看到的,很難做到這一點;事實上,我認爲它的內插方式存在一個錯誤。)

例如,要旋轉5 rpm(默認爲spin3d()),完整旋轉需要12秒。你會想是這樣的:

fn <- spin3d() 
rglwidget() %>% 
playwidget(par3dinterpControl(fn, 0, 12, steps = 40), 
      step = 0.01) 

的40步的選擇是一種任意的,但你不希望這個數字太小了,因爲你會得到現場的扭曲,因爲那些之間進行插值腳步。另一方面,它放在網頁中的數據量與價值成正比,所以你不希望它不必要的大。

+0

工程很好,非常感謝。我的基本錯誤是假設spin3d不能與小部件一起使用,並且您必須使用par3dinterp來控制您希望的任何移動。我也有點放心,編碼par3ddinterp和par3dintercontrol不完全是基本的。 –