2012-08-14 87 views
1

如何在R中绘制三维圆锥体和圆柱体?我认为你正在使用线框,但我无法在任何地方找到任何示例。我正在尝试使用Matlab和Mathematica通常所做的事情。如果绘制3D物体可以做到的那么容易,因为这些节目,我真的想R.R中的三维圆锥和圆柱体

+2

'cone3d'在rgl-demo中。 – 2012-08-14 04:59:44

+0

非常感谢您的指导。无论如何不要使用rgl来做到这一点?你知道,我不认为这很难。但我没有看到任何例子。 – Ikuyasu 2012-08-15 01:15:38

回答

3

这是亚科Nevalainen和Deepayan萨卡如何用格子做的来源: https://stat.ethz.ch/pipermail/r-help/2009-April/196715.html

library(lattice) 

A<-matrix(ncol=2, nrow=64) 

for(i in 0:63) { A[i+1,1]<-sin(i/10) 
A[i+1,2]<-cos(i/10) } 

Sigma<-matrix(c(0.5,0.1,0.1,0.25),byrow=TRUE,nrow=2) 
G<-eigen(Sigma) 

E1<-t(G$vector%*%t(A)) 
E2<-t(diag(sqrt(G$values))%*%t(E1)) 
mu<-c(0.1,0.2) 
E3<-sweep(E2,2,-mu) 

a<-sqrt(max(rowSums(sweep(E3,2,mu)**2))) 
b<-sqrt(min(rowSums(sweep(E3,2,mu)**2))) 

astar<-as.numeric(a+abs(mu[1])) 
bstar<-as.numeric(b+abs(mu[2])) 

xstar<-seq(-astar,astar,len=50) 
ystar<-seq(-bstar,bstar,len=50) 

g<-expand.grid(x=xstar,y=ystar) 

p1<-2*g$x*mu[1]/a**2+2*g$y*mu[2]/b**2 
p2<-(g$x**2/a**2+g$y**2/b**2) 
p3<-mu[1]**2/a**2+mu[2]**2/b**2-1 

q<-(p1+sqrt(p1**2-4*p2*p3))/(2*p2) 
z<-sqrt(1-(q*g$x)**2-(q*g$y)**2) 
zstar<-(z/q) 
ind0<-!(q<1) 
g$z<-zstar 
sc<-matrix(c(rep(c(-1,-1,-1),sum(ind0))),nrow=sum(ind0),byrow=TRUE) 
gstar<-rbind(g[ind0,],sc*g[ind0,]) 

group<-c(rep(1,nrow(gstar)/2),rep(2,nrow(gstar)/2)) 
gstar$group<-group 
gstar <- g 
gstar$z[!ind0] <- NA 
gstar$z2 <- -gstar$z 
wireframe(z + z2 ~ x * y, gstar, colorkey=TRUE,drape=TRUE, scales=list(arrows=FALSE)) 

enter image description here