Нужна помощь с использованием par3dinterp и playwidget для поворота сюжета с помощью rgl в R
Я работаю над относительно новым документом - "Взаимодействие с пользователем в WebGL" (8 марта 2017 г.) по адресу 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 ответ
Для простого прядения используйте spin3d()
скорее, чем par3dinterp()
, (Вы должны быть в состоянии использовать последнее, но, как вы видели, трудно сделать это правильно; на самом деле, я думаю, что в интерполяции есть ошибка).
Например, вращаться со скоростью 5 об / мин (spin3d()
по умолчанию), полный оборот занимает 12 секунд. Вы хотели бы что-то вроде этого:
fn <- spin3d()
rglwidget() %>%
playwidget(par3dinterpControl(fn, 0, 12, steps = 40),
step = 0.01)
Выбор из 40 шагов является произвольным, но вы не хотите, чтобы это число было слишком маленьким, потому что вы получите искажения сцены, так как они интерполируются между этими шагами. С другой стороны, объем данных, которые он помещает на веб-страницу, пропорционален значению, поэтому вы не хотите, чтобы он был чрезмерно большим.