You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rgl的surface3d绘制方形面时后两个面无法显示的问题

rgl包surface3d无法渲染最后两个面的问题排查

你的问题出在最后两段代码的z_3D矩阵构造上。rgl的surface3d要求z矩阵的每个元素对应x和y网格点的z值,当你构造z_3D <- matrix(c(min(C),max(C)),nrow = 2,ncol = 2)时,生成的矩阵是:

[,1] [,2]
[1,]    0    1
[2,]    0    1

结合y_3D <- c(min(B),min(B))(即c(0,0)),最终生成的四个顶点是:

  • (0, 0, 0)、(1, 0, 1)、(0, 0, 0)、(1, 0, 1)
    这实际上是两个重复的点,构不成有效面,因此rgl不会渲染,且不会抛出错误。

修正方案

需要构造对应x和y网格的正确z矩阵,确保四个顶点不重复,能构成矩形面。对于垂直于y轴的面(y固定),z矩阵的每一行应该对应相同的z值,列对应x的取值:

修正后的最后两段代码如下:

# 绘制y=min(B)的面
x_3D <- c(min(A), max(A))
y_3D <- c(min(B), min(B))
z_3D <- matrix(c(min(C), min(C), max(C), max(C)), nrow = 2, ncol = 2)
surface3d(x = x_3D, y = y_3D, z = z_3D)

# 绘制y=max(B)的面
x_3D <- c(min(A), max(A))
y_3D <- c(max(B), max(B))
z_3D <- matrix(c(min(C), min(C), max(C), max(C)), nrow = 2, ncol = 2)
surface3d(x = x_3D, y = y_3D, z = z_3D)

或者用byrow=TRUE让矩阵构造更直观:

z_3D <- matrix(c(min(C), min(C), max(C), max(C)), nrow = 2, ncol = 2, byrow = TRUE)

这样生成的z矩阵是:

[,1] [,2]
[1,]    0    0
[2,]    1    1

对应的四个顶点为(0,0,0)、(1,0,0)、(0,0,1)、(1,0,1),能正常构成立方体的侧面。

内容的提问来源于stack exchange,提问作者Marcel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:09:13