Plotly绘图z值错误:曲面与切平面绘制异常求助
问题分析与修正代码
核心问题
- 原代码中
x和y采用等长离散采样,点(0,3)不在采样点集合中,导致可视化时红色标记点看起来不在曲面上(数学上它确实属于连续曲面和切平面)。 - 用
%o%外积计算曲面矩阵的写法不够直观,易引发维度混淆。
修正后的代码
library(plotly) # 调整采样序列,确保(0,3)在采样点内 x <- seq(from = -3, to = 3, by = 0.1) y <- seq(from = -2, to = 4, by = 0.1) # 计算原曲面z值,用outer函数更直观 z <- outer(x, y, function(x_val, y_val) x_val^2 + 2*x_val - y_val) # 计算切平面:基于切点(0,3,-3)的公式 z = z0 + f_x(x0,y0)(x-x0) + f_y(x0,y0)(y-y0) # 偏导f_x=2x+2(在(0,3)处为2),f_y=-1(在(0,3)处为-1) z1 <- outer(x, y, function(x_val, y_val) -3 + 2*(x_val - 0) -1*(y_val - 3)) fig <- plot_ly(showscale = FALSE) %>% add_surface(z = z, x = x, y = y, name = "原曲面", opacity = 0.7) %>% add_surface(z = z1, x = x, y = y, name = "切平面", opacity = 0.5) %>% add_markers(x = 0, y = 3, z = -3, marker = list(color = "red", size = 8), name = "切点") fig <- fig %>% layout( scene = list( xaxis = list(title = "x"), yaxis = list(title = "y"), zaxis = list(title = "z"), camera=list(eye = list(x=1.87, y=0.88, z=-0.64)) ) ) fig
关键修正点
- 将
length.out=100改为by=0.1,确保0在x序列、3在y序列中,红色标记点会精准落在曲面和切平面的采样点上。 - 用
outer()函数替代%o%外积,代码可读性更强,避免维度匹配错误。 - 完整写出切平面推导公式,后续修改切点时更易维护。
- 增加曲面名称、坐标轴标签,调整曲面透明度,让切点与两个曲面的空间关系更清晰。
内容的提问来源于stack exchange,提问作者wut
相关产品推荐
相关产品推荐

