需要帮助使用par3dinterp和playwidget在R中使用rgl旋转绘图

时间:2017-05-05 08:34:01

标签: r rgl

我正在处理相对较新的文档 - WebGL中的用户交互(2017年3月8日) https://cran.r-project.org/web/packages/rgl/vignettes/WebGL.html

大约2/3的页面是下面的代码示例,它执行"复杂"剧情的旋转动画:

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轴旋转绘图但我的noggin似乎缺少关于时间规范的基本内容和值函数的评估....我可以得到它旋转部分路径360度然后向后摆动,但不要继续往返......请帮助。

提前致谢 亚历

[我正在尝试对以下内容进行排列....

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 个答案:

答案 0 :(得分:1)

对于简单旋转,请使用spin3d()而不是par3dinterp()。 (你应该可以使用后者,但正如你所见,很难做到正确;事实上,我认为它插入的方式有一个错误。)

例如,要以5 rpm(spin3d()默认值)旋转,完整旋转需要12秒。你想要这样的东西:

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

40个步骤的选择有点随意,但你不希望这个数字太小,因为当它在这些步骤之间进行插值时,你会得到场景的扭曲。另一方面,它放在网页中的数据量与该值成正比,因此您不希望它不必要地大。