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

如何抑制rgl中planes3d随球体半径扩展绘图区域并实现裁剪?

解决rgl中planes3d随球体半径扩展的问题

方法1:手动固定绘图范围

rgl默认会根据所有绘制对象(包括球体的完整半径范围)自动调整绘图边界。要避免平面随球体半径扩展,可先绘制平面,再绘制球体,最后手动固定显示范围,或直接用xlim/ylim/zlim约束坐标区间。

修改后的代码示例:

library(rgl)
z <- c(0,0,1)
y <- c(0,1,0)
x <- c(1,0,0)
bg3d(color = "white")

# 先绘制平面
planes3d(1, 0, 0, 0, col = 'blue', alpha = 0.6, size = 0)
planes3d(0, 1, 0, 0, col = 'red', alpha = 0.6, size = 0)
planes3d(0, 0, 1, 0, col = 'green', alpha = 0.6, size = 0)

# 绘制球体
rgl.spheres(x, y, z, r = 0.2, color = "grey") 

# 手动固定坐标范围,限制在0到1之间
par3d(xlim = c(0, 1), ylim = c(0, 1), zlim = c(0, 1))

view3d(theta=230, phi=-30, zoom=1, fov=0)
snapshot3d("r0_2_fixed.png", fmt="png", width=640, height=480, webshot=F)

方法2:使用裁剪功能限制显示区域

如果需要更灵活的区域控制,可通过clip3d()函数定义裁剪边界,只保留指定范围内的内容:

library(rgl)
z <- c(0,0,1)
y <- c(0,1,0)
x <- c(1,0,0)
bg3d(color = "white")

rgl.spheres(x, y, z, r = 0.2, color = "grey") 
planes3d(1, 0, 0, 0, col = 'blue', alpha = 0.6, size = 0)
planes3d(0, 1, 0, 0, col = 'red', alpha = 0.6, size = 0)
planes3d(0, 0, 1, 0, col = 'green', alpha = 0.6, size = 0)

# 设置裁剪范围,保留x∈[0,1]、y∈[0,1]、z∈[0,1]的区域
clip3d(
  xmin = 0, xmax = 1,
  ymin = 0, ymax = 1,
  zmin = 0, zmax = 1,
  draw = TRUE
)

view3d(theta=230, phi=-30, zoom=1, fov=0)
snapshot3d("r0_2_clipped.png", fmt="png", width=640, height=480, webshot=F)

关键说明

  • 先绘制平面再设置范围,可避免球体半径干扰平面的显示边界;
  • par3d()的坐标范围约束是全局生效的,超出范围的对象会被直接截断;
  • clip3d()支持自定义裁剪平面,适合更复杂的区域控制场景。

内容的提问来源于stack exchange,提问作者大根おろし

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:25:03