Ответ 1
Я пытался сам это решить, и я думаю, что у меня есть ответ для поддержания перспективы пользовательского модифицированного интерактивного сюжета. view3d влияет только на перспективу в уже открытом окне, ключ заключается в том, чтобы использовать open3d для настройки вашего окна и перспектив до фактического создания графика.
Другими словами, нам фактически не нужно использовать информацию о phi и theta angle (напрямую). Как только вы создали интерактивный сюжет и получили понравившуюся вам перспективу (вы, вероятно, захотите изменить размер окна или захват изображения будет слишком маленьким), что-то вроде следующего будет извлекать необходимую информацию:
zoom<-par3d()$zoom
userMatrix<-par3d()$userMatrix
windowRect<-par3d()$windowRect
Затем откроется окно с желаемым размером и перспективой (и масштабированием), сгенерирует график и затем захватит изображение.
open3d(zoom = zoom, userMatrix = userMatrix, windowRect=windowRect)
perps3d(x=x,y=y,z=z) # plus whatever arguments you need, but ignoring all perspective arguments
rgl.snapshot( filename, fmt="png", top=TRUE)
Это основная идея и может использоваться для автоматического создания графиков одной и той же перспективы. Вы также можете обходиться с помощью аргументов scale или fov из par3d, как вы сочтете нужным, с той же идеей, чтобы извлекать и использовать информацию. Я думаю, что это то, что потребуется для Али выше.
Немного нецелесообразно вызывать persp3d при автоматическом создании нескольких графиков, потому что эта функция действительно предназначена для интерактивных графиков. Я подозреваю, что вы можете использовать информацию userMatrix, zoom, fov, scale и т.д. Из par3d, а некоторые математики (например, Али), чтобы определить phi, theta, r и d, и перенести их в persp напрямую - вместо того, чтобы иметь дело с persp3d для каждого сюжет, но я не тестировал это.