2013-08-05 5 views
1

으로 저장합니다. rgl 패키지의 persp3d 기능을 사용하여 멋진 3D 플롯을 얻습니다.persp3d 플롯을 회전하여 이미지를 png

이제 persp3d 함수를 회전하고 각각의 작은 회전 이미지를 png 파일로 저장하려고합니다. 그런 다음, 라텍스 프리젠 테이션에 animategraphic 명령으로 png를 포함시키고 싶습니다.

따라서 저는 어떻게 할 수 있습니까? persp3d 음모가 만들 ...

내 코드를

은 내가 라텍스을 구현할 수있는 방법을 필요로하므로 PNG 파일의 이름은 어떻게 든 A1, 등등 A2와 같이해야한다 :

persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[zcol2], 
     ticktype="detailed", xlab="", ylab="", zlab="",axes=FALSE) 

나는 다음 spin3d 명령으로 회전하려고 :

spind3d(rpm=3) 

작동하지 않는다. 또한 이것은 내 드라이브에 PNG를 저장하지 않을까요?

+0

나는 또한 시도 play3d (spin3d 수 (rpm = 1), 기간 = 10)하지만 내 드라이브에 저장하지 않아도됩니까? –

+0

movie3d()에 대해서도 알고 있지만 명령이 작동하지 않습니까? 왜 이것이 작동하지 않는지 혼란 스럽네요. 그리고 또 하나의 질문 : LaTex에서 R 시스템과 같은 회전 속도를 어떻게 구현할 수 있습니까? –

+0

* 한숨 *이 문맥에서 "작동하지 않는다"는 의미는 무엇입니까? 오류 메시지? 아무것도 만들지 않았 니? 화면의 큰 검은 색 사각형? 당신은 더 분명해야합니다. 또한, 당신의 예제를 재현성있게 만드십시오 ... – Spacedman

답변

5

보기를 변경하려면 spin3d 함수를 사용하고 이미지를 저장하려면 movie3d을 사용하는 방법이 있습니다. 기본적으로 movie3dtempdir()가 설정 한 폴더에 파일을 저장하는 것이

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") 

참고.

4
x=1:10 
y=1:10 
z=matrix(runif(100),10,10) 
persp3d(x,y,z,theta=50,phi=25) 

다음 쎄타 또는 피를 통해 루프, 각도를 설정하는 view3d 사용, 당신은 피 대신 세타를 통해 루프 이럴땐 PNG에게

theta = seq(0,360,len=10) 
for(i in 1:10){ 
snapshot3d(file=paste0("spin-",i,".png")) 
view3d(theta=theta[i]) 
} 

를 만들기 위해 snapshot3d. 어쨌든, 네가 원하는 PNG를 얻지, 안 그래?

+0

+1하지만 더 "고급"preimplemented 함수가 아닌 무차별 대입 루프 솔루션입니까? 어쨌든 고마워요. 더 좋은 대답이 없다면 받아 들일 것입니다! –

+3

'movie3d가 작동하지 않는다'고하고 'spind3d가 작동하지 않는다'고 말하면 정확히 작동하지 않는다고 가정합니다. – Spacedman

2

누군가 필요할 수 있습니다. 나는 persp3Drgl에 대해 다음 조합을 사용 : 게다가

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 값 (마우스로 회전 후 플롯)을 추적하기 위해 다음 명령을 사용

userMat = par3d(no.readonly=TRUE)$userMatrix 
관련 문제