首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >旋转persp3d图并将图像保存为png

旋转persp3d图并将图像保存为png
EN

Stack Overflow用户
提问于 2013-08-05 16:43:31
回答 3查看 6.3K关注 0票数 3

使用R,我正在使用persp3d函数的rgl包,以获得一个很好的三维图形。

现在,我想旋转persp3d函数,并将每个小的旋转图像保存为png文件。然后,我想用命令animategraphic将png包含在我的latex演示文稿中。

所以我想要泄密,我怎么能做到呢?

我需要他们的一种方式,我可以实现他们在乳胶,所以png文件的名称应该在某种程度上类似于a1,a2等.

我创建persp3d图的代码是:

代码语言:javascript
运行
复制
persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[zcol2],
        ticktype="detailed", xlab="", ylab="", zlab="",axes=FALSE)

然后我尝试使用spin3d命令旋转它:

代码语言:javascript
运行
复制
spind3d(rpm=3)

这不起作用。而且这不会把pngs保存到我的驱动器上吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-05 20:33:45

下面是使用函数spin3d更改视图和使用movie3d保存图像的另一种方法。

代码语言:javascript
运行
复制
library(rgl)
x <- seq(-10, 10, length= 30)
y <- x
f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
z[is.na(z)] <- 1
persp3d(x,y,z,theta=0,phi=25, col = "lightblue",
        ticktype="detailed", xlab="", ylab="", zlab="",axes=FALSE)
movie3d(spin3d(axis = c(0,0,1), rpm = 10), duration=6,  type = "png")

注意,默认情况下,movie3d将文件保存在tempdir()设置的文件夹中。

票数 5
EN

Stack Overflow用户

发布于 2013-08-05 18:41:05

代码语言:javascript
运行
复制
x=1:10
y=1:10
z=matrix(runif(100),10,10)
persp3d(x,y,z,theta=50,phi=25)

然后在θ或phi上循环,使用view3d来设置角度,使用snapshot3d来生成PNG。

代码语言:javascript
运行
复制
theta = seq(0,360,len=10)
for(i in 1:10){
 snapshot3d(file=paste0("spin-",i,".png"))
 view3d(theta=theta[i])
}

你可能要在phi上循环,而不是θ。不管怎么说,这样你就能得到你想要的PNG了,不是吗?

票数 4
EN

Stack Overflow用户

发布于 2015-10-28 15:42:44

可能是有人需要。我对persp3Drgl使用了以下组合:

代码语言:javascript
运行
复制
userMat = matrix(data = c( 0.4892255, 0.8709987, 0.04464279, 0,
                       -0.5228708, 0.2519508, 0.81430787, 0,
                       0.6980215, -0.4217298, 0.57868713, 0,
                       0.0000000, 0.0000000, 0.0000000, 1
                       ), nrow = 4, ncol = 4)

persp3Drgl(..., userMatrix = userMat )
par3d( windowRect=c( 0,0,100,100 ) )
snapshot3d( file.path(plotDir, "3D.png"), top = TRUE )

此外,我还使用以下命令跟踪userMatrix值(鼠标旋转绘图后)

代码语言:javascript
运行
复制
userMat = par3d(no.readonly=TRUE)$userMatrix
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18063468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档