我希望实现的是,在rgl中显示一个3D图形,将其旋转到我想要展示的视角并保存到文件中。我知道可以使用
问题是,
我的想法是保存当前视图的旋转并将其与另一个函数一起使用,该函数可以生成类似于
你也可以这样做:
旋转矩阵如下所示:
我知道从旋转矩阵中提取旋转角度的数学方法。但我不是很清楚如何在我的情况下应用它,特别是因为矩阵有4行和列。我期望每个方向只有3个...接下来的问题是
如果有其他方法可以将rgl快照保存为无损格式,我会很高兴了解!
rgl.snapshot
函数来实现,如下所示:library(rgl)
x <- runif(20)
y <- runif(20)
z <- runif(20)
plot3d(x, y, z)
rgl.snapshot("rgl.snapshot.png")
问题是,
rgl.snapshot
生成的文件分辨率为屏幕分辨率,因此对于打印而言不够高。我无法影响文件保存时的分辨率。通常情况下,更好的方法是将文件保存为矢量格式,如pdf或svg。我的想法是保存当前视图的旋转并将其与另一个函数一起使用,该函数可以生成类似于
plot3D
包中的非交互式 3D 散点图,例如 scatter3D
函数。为了保存旋转矩阵,我执行了以下操作:rotationMatrix <- rgl.projection()
你也可以这样做:
rotationMatrix <- par3d()$modelMatrix
旋转矩阵如下所示:
$model
[,1] [,2] [,3] [,4]
[1,] 0.9584099 0.0000000 0.0000000 -0.4726846
[2,] 0.0000000 0.3436644 0.9792327 -0.6819317
[3,] 0.0000000 -0.9442102 0.3564116 -3.6946754
[4,] 0.0000000 0.0000000 0.0000000 1.0000000
$proj
[,1] [,2] [,3] [,4]
[1,] 3.732051 0.000000 0.000000 0.00000
[2,] 0.000000 3.732051 0.000000 0.00000
[3,] 0.000000 0.000000 -3.863703 -14.36357
[4,] 0.000000 0.000000 -1.000000 0.00000
$view
x y width height
0 0 256 256
我的问题是如何从这个旋转矩阵得到用于scatter3D
函数的参数phi
和theta
。
library(plot3D)
# phi = ?
# theta = ?
pdf("scatter3D.pdf")
scatter3D(x, y, z, pch=20, phi = 20, theta =30, col="black")
dev.off()
我知道从旋转矩阵中提取旋转角度的数学方法。但我不是很清楚如何在我的情况下应用它,特别是因为矩阵有4行和列。我期望每个方向只有3个...接下来的问题是
scatter3D
仅使用两个旋转轴(theta给出方位方向,phi给出极角),所以我需要从3轴旋转转换到与二轴旋转相同的旋转结果。我认为phi的旋转轴是由theta的旋转定义的。如果有其他方法可以将rgl快照保存为无损格式,我会很高兴了解!