rgl
包中的surface3d
函数看起来很合适。很容易创建一个包装器,它将使用seq()
创建一个x-y向量集,然后将这些向量传递给outer
,并将f2作为FUN参数,然后调用surface3d
。
还有一个persp3d
,作者(Duncan Murdoch和其他人)说它是“更高级”的,它似乎默认添加轴,而surface3d
则没有。
curve_3d <- function(f2, x_range=c(-1, 1), y_range=c(-1, 1), col=1:6 ){
if (!require(rgl) ) {stop("load rgl")}
xvec <- seq(x_range[1], x_range[2], len=15)
yvec <- seq(y_range[1], y_range[2], len=15)
fz <- outer(xvec, yvec, FUN=f2)
open3d()
persp3d( xvec, yvec, fz, col=col) }
curve_3d(f2)
snapshot3d("out3dplane.png")
![可旋转的平面伪3D图](https://istack.dev59.com/nFtqE.webp)
现在我进一步思考,你也可以使用persp()
或wireframe()
来实现类似的效果。 "诀窍"是使用outer(..., FUN=fun)
。而且,当我进一步思考时......使用它与outer
的能力取决于它由所有矢量化操作组成。如果它们不是矢量化的,我们需要使用Vectorize
或mapply
进行重写。