如何在R中绘制三维参数方程?

时间:2014-05-25 04:58:34

标签: r plot 3d

根据维基页面上的参数方程(http://en.wikipedia.org/wiki/Parametric_equation),我可以如下绘制二维方程:

#for a circle: 
x = seq(-pi, pi, length.out=30)
plot(sin(x),cos(x))

# for a star: 
a=10; b=10/1.8
x=seq(-50,50,length.out=500)
plot((a-b)*cos(x)+b*cos(x*((a/b)-1)), (a-b)*sin(x)-b*sin(x*((a/b)-1)), ylim=range(-13,13))

如何在方程式给出的螺旋线的3d图上绘制3d方程:

x=a*cos(t)
y=a*sin(t)
z=b*t

从搜索中我发现3d绘图函数采用矩阵或x,y,z值而不是数学曲线函数。

2 个答案:

答案 0 :(得分:8)

您可以像绘制2D方程一样绘制3D方程式。

library(lattice)
t<-seq(-2*pi, 2*pi, length.out=200)
cloud(z~x+y,data.frame(x=3*cos(t),y=3*sin(t), z=2*t))

helix 3D plot

所以是的,您无法直接提供原始函数,但您可以根据这些函数轻松计算要绘制的点。如果您有其他想法,请告诉我。

这是一个双参数圆环

t <- seq(0, 2*pi, length.out=50); 
u <- seq(0, 2*pi, length.out=50); 
tu<-expand.grid(t=t,u=u)
R <- 6; 
r <- 3; 
tu <- transform(tu, 
    x = cos(t)*(R+r*cos(u)), 
    y = sin(t)*(R+r*cos(u)),
    z = r*sin(u)
)

rr<-c(-10,10)
cloud(z~x+y, tu, xlim=rr, ylim=rr, zlim=rr, screen=list(y=20));

torus

实际上,我刚刚意识到wireframe更好,只是花了我一点时间来弄清楚语法。

xm<-outer(t,u,function(t, u)cos(t)*(R+r*cos(u)))
ym<-outer(t,u,function(t, u)sin(t)*(R+r*cos(u)))
zm<-outer(t,u,function(t, u) r*sin(u))

rr<-c(-10,10)
wireframe(zm~xm+ym, xlim=rr, ylim=rr, zlim=rr, screen=list(y=30))

?cloud帮助页面上的更多详情

wireframe torus

答案 1 :(得分:1)

使用plotly

library(plotly)

t <- seq(-2*pi, 2*pi, length.out=200)
dat <- data.frame(x=3*cos(t), y=3*sin(t), z=2*t)

plot_ly(dat, x = ~x, y = ~y, z = ~z, type = 'scatter3d', mode = 'lines',
        line = list(width = 4))

enter image description here