package:rgl 中的surface3d
函数看起来很匹配。创建一个包装器将非常简单,该包装器将采用您的函数,创建一组 xy 向量,seq()
然后将这些向量传递给outer
您的 f2 作为 FUN 参数,然后调用surface3d
.
还有一个persp3d
作者(邓肯默多克,也许还有其他人)说是“更高级别”,它似乎默认添加了轴,而 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")
persp()
现在我进一步考虑它,你可以用or做类似的事情wireframe()
。“技巧”是使用外部(...,FUN=fun)。而且当我进一步考虑时……使用它的能力outer
取决于它由所有矢量化操作组成。如果它们没有被矢量化,我们需要用Vectorize
or重写mapply
。