R: создать анимированный gif в rgl с вращением вокруг оси Z

73
11

Мне нужно создать анимированный gif из пакета визуализации OpenGL rgl в R. Рецепт описан в этой ссылке на genomearchitecture.com. Сначала мы создаем 3D-куб с нашим изображением. Он был изготовлен в plot3D пакете с помощью scatter3D() команд. Затем мы вызываем окно rgl с помощью

require(plot3Drgl)
plotrgl()

Рецепт из приведенной выше ссылки звучит следующим образом (существенная часть):

for (i in 1:90) {
view3d(userMatrix=rotationMatrix(2*pi * i/90, 1, -1, -1))
rgl.snapshot(filename=paste("animation/frame-",
sprintf("%03d", i), ".png", sep=""))
}

то есть мы создаем 90 снимков rgl и поворачиваем наш объект, используя параметры в userMatrix=rotationMatrix(). Однако именно эта директива выполняет вращение вокруг некоторой определенной оси, и вся вращающаяся анимация выглядит странно, особенно если у нас есть только 3D-географическая карта для вращения, как на этом изображении.

cube in rgl

Мы не хотим, чтобы это изображение вращалось и перевернулось вверх, нам просто нужно повернуть его вокруг вертикальной оси Z. Тем не менее, каждая попытка изменить директиву view3d(userMatrix=rotationMatrix(2*pi * i/90, 1, -1, -1)) меняет вектор (1, -1, -1) создает куб с Z, обращенная к нам с исходным положением угла. В статической структуре положение куба можно интуитивно контролировать двумя полярными координатами через директиву

plotdev(theta=10,phi=15)

Было бы неплохо запрограммировать моментальные снимки, запускающие theta от 0 до 2 pi с некоторыми разумными phi, но установка theta, phi вместо userMatrix отлично работает только для статического изображения. В окне rgl он снова производит что-то не ожидаемое, например, theta = 0, phi = 0 снова направляет ось Z к нам. Как можно изменить директиву угла обзора, чтобы заставить куб вращаться вокруг своей оси Z?

спросил(а) 2017-12-25T02:42:00+03:00 2 года, 11 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема