图下方功能垂直表面

问题描述 投票:1回答:2

我试图创建一个使用rgl包一个非常简单的3D绘图:我只是x值映射到y值的功能。对于给定的z(在我的例子:z = 1),我可以绘制在3D绘图这一功能:

library(rgl)

mycurve <- function(x) { return (1/x)}
myx <- seq(1, 10, by = 0.1)

plot3d(x = NA, xlim = c(0, 10), ylim = c(0, 10), zlim = c(0, 5), 
       xlab = "x", ylab = "y", zlab = "height")
lines3d(x = myx, y = mycurve(myx), z = 1)

2D line in 3D plot

然而,即使试图了解?persp3d?surface3d的文档小时后,我仍然不知道如何将面添加到我的阴谋是“连接”我行于x-y平面 - 是这样的:

Space curve.

(为了产生这个形象,我被骗了通过绘制多行:for (i in seq(0, 1, by = 0.01)) { lines3d(x = myx, y = mycurve(myx), z = i) }

我想,我需要提供正确的价值观以某种方式surface3d。从?surface3d

表面通过在Z高度值的矩阵定义,与对应于在X对应于y中的值的值和列的行。

考虑到我的空间曲线是“垂直”,x的每一值对应于y只值1。不过,我需要为每个z对,这就是为什么我不知道如何着手指定两个xy值。

我如何绘制空间曲线如图所示,第二图像?

r 3d rgl
2个回答
2
投票

persp3d,所有3个参数可以是矩阵,这样你就可以绘制任意形状的表面。为了您的需求,这工作:

mycurve <- function(x) { return (1/x)}
myx <- seq(1, 10, by = 0.1)


xmat <- matrix(NA, 2, length(myx))
ymat <- matrix(NA, 2, length(myx))
zmat <- matrix(NA, 2, length(myx))
for (i in 0:1) { 
  xmat[i+1,] <- myx
  ymat[i+1,] <- mycurve(myx)
  zmat[i+1,] <- i
}
library(rgl)
persp3d(x = xmat, y = ymat, z = zmat, xlim = c(0, 10), ylim = c(0, 10), zlim = c(0, 5), 
       xlab = "x", ylab = "y", zlab = "height", col = "gray")

所产生的图像看起来是这样的:

enter image description here

如果你想z依靠xy,你可能会希望更小的步长,但是这对你的作品是后表面。


1
投票

要使用persp3d功能的一个需要创建针对z对应于所有在所需范围内的x和y值的矩阵。 我修改你的函数取x和y参数和返回所需的Z值。外部函数将反复调用函数来填充矩阵。然后情节,与所定义的x和y轴和z(从外功能)

library(rgl)

mycurve <- function(x, y) { return (1/x)}
myx <- seq(1, 10, by = 0.4)
myy <-seq(1, 10, by =0.4)
#create matrix
data<-outer(myx, myy, mycurve)
#plot points
persp3d(x=myx, y=myy, z=data, 
        xlab = "x", ylab = "y", zlab = "height")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.