如何在R中向3D绘图添加椭圆平面

如何在R中向3D绘图添加椭圆平面,r,R,关于打印平面z=x+y的R代码: library("rgl") f <- function(x,y) x+y x_grid <- seq(0,1, length=20) y_grid <- x_grid z_grid <- outer(x_grid, y_grid, f) surface3d(x_grid, y_grid, z_grid,front="line",back="line") axes3d() 库(“rgl”) f仍然不确定要做什么,但这将绘制平面的

关于打印平面z=x+y的R代码:

library("rgl")
f <- function(x,y) 
x+y

x_grid <- seq(0,1, length=20)
y_grid <- x_grid 
z_grid <- outer(x_grid, y_grid, f)
surface3d(x_grid, y_grid, z_grid,front="line",back="line")
axes3d() 
库(“rgl”)

f仍然不确定要做什么,但这将绘制平面的交点

z=x+y

抛物线椭球呢

z=5x2-4xy+5y2

并为链接图像中的结果椭圆着色

library(rgl)
f      <- function(x,y) x+y
my.fun <- function(x,y) 5*x^2 - 4*x*y + 5*y^2

x_grid <- seq(0,1, length=20)
z_grid <- outer(x_grid, x_grid, f)

theta <- seq(0,2*pi,length=1000)
r     <- sqrt(5/21)
df    <- expand.grid(x=r*cos(theta),y=r*cos(theta))
df$z  <- with(df,f(x,y) - my.fun(x,y))
xyz   <- df[df$z>=0,]
surface3d(x_grid, x_grid, z_grid, front="line",back="line")
axes3d() 
zlim    <- range(-1000*f(xyz$x,xyz$y))
zlen    <- diff(zlim) + 1
palette <- heat.colors(zlen)                       
col     <- palette[-1000*f(xyz$x,xyz$y)-zlim[1]+1 ]
with(xyz,points3d(x,y,f(x,y),color=col))

这回答了有关如何在2d中执行此操作的问题。。。目前它是一个2d函数,因此使用rgl来实现它的请求没有多大意义。轮廓函数无法写入RGL窗口。您的函数
my.fun(…)
定义的是抛物线椭球体,而不是椭圆。是否希望抛物线椭球体与三维平面相交??还是只想在一个3d绘图中同时绘制椭球体和平面?surface3d(x_网格,y_网格,z_网格,front=“line”,back=“line”)不是椭圆平面,我需要在3d绘图中绘制椭圆平面。3d绘图如:非常感谢。你能使平面和椭球体平行于XY平面吗?我想在这个3D绘图中添加椭球面。谢谢。如果这是你想要的,那么绘制平面的意义是什么?我希望z=0.1平面(平行于XY平面),但我不知道平面方程。在(x,y)中创建一个相对精细的点网格,然后简单地确定f(x,y)-my.fun(x,y)<0的所有点。我真的不明白。你能详细解释一下吗?谢谢
library(rgl)
f      <- function(x,y) x+y
my.fun <- function(x,y) 5*x^2 - 4*x*y + 5*y^2

x_grid <- seq(0,1, length=20)
z_grid <- outer(x_grid, x_grid, f)

theta <- seq(0,2*pi,length=1000)
r     <- sqrt(5/21)
df    <- expand.grid(x=r*cos(theta),y=r*cos(theta))
df$z  <- with(df,f(x,y) - my.fun(x,y))
xyz   <- df[df$z>=0,]
surface3d(x_grid, x_grid, z_grid, front="line",back="line")
axes3d() 
zlim    <- range(-1000*f(xyz$x,xyz$y))
zlen    <- diff(zlim) + 1
palette <- heat.colors(zlen)                       
col     <- palette[-1000*f(xyz$x,xyz$y)-zlim[1]+1 ]
with(xyz,points3d(x,y,f(x,y),color=col))
library(rgl)
f      <- function(x,y) rep(1,length(x))
my.fun <- function(x,y) 5*x^2 - 4*x*y + 5*y^2

x_grid <- seq(0,1, length=20)
z_grid <- outer(x_grid, x_grid, f)

theta <- seq(0,2*pi,length=1000)
r     <- sqrt(5/21)
df    <- expand.grid(x=r*cos(theta),y=r*cos(theta))
df$z  <- with(df,f(x,y) - my.fun(x,y))
xyz   <- df[df$z>=0,]
surface3d(x_grid, x_grid, z_grid, front="line",back="line")
axes3d() 
zlim    <- range(-1000*xyz$x)
zlen    <- diff(zlim) + 1
palette <- heat.colors(zlen)               # height color lookup table
col     <- palette[-1000*xyz$x-zlim[1]+1 ] # assign colors to heights for each point
with(xyz,points3d(x,y,f(x,y),color=col))