如何使用plot()绘制3D凸包列表bunnyConvexlhull(完整兔子模型)
解决方案:批量绘制所有Z轴切片凸包以生成完整3D模型
你可以通过循环遍历bunnyConvexlhull列表中的所有凸包元素,在同一个rgl绘图窗口中依次绘制每个切片,从而得到完整的3D凸包兔子模型。以下是修正并优化后的完整代码:
library("onion") library("geometry") library("rgl") library("ggplot2") data(bunny) bunny <- as.data.frame(bunny) maxZ <- max(bunny[,3]) #> 0.0587997 minZ <- min(bunny[,3]) #> -0.0618736 # 计算切片数量(按0.01的Z轴间隔分割) slice_count <- round((maxZ - minZ)/0.01) # 按Z轴切片分割点云数据 bunnySlices <- split(bunny, ggplot2::cut_interval(bunny[,3], slice_count)) # 生成每个切片的凸包 bunnyConvexlhull <- lapply(bunnySlices, function(x) convhulln(x, output.options = TRUE)) # 初始化3D绘图窗口 open3d() # 遍历所有凸包切片,在同一窗口中批量绘制 lapply(bunnyConvexlhull, function(hull) { plot(hull, col = "pink", alpha = 0.7, add = TRUE) }) # 可选:添加坐标轴与标题 axes3d() title3d(main = "Z轴切片凸包拼接的3D兔子模型")
关键修改说明:
- 修正了原代码中切片数量的计算错误:
cut_interval的第二个参数是切片总数,而非区间宽度,因此需要用(maxZ - minZ)/0.01计算切片数量后传入。 - 使用
open3d()显式初始化rgl的3D绘图窗口,确保所有切片都绘制在同一画布中。 - 给
plot()添加add = TRUE参数,避免每次绘制新切片时创建独立窗口。
进阶优化(可选):
如果想通过渐变颜色区分不同Z层的凸包,增强层次感,可以用以下代码:
open3d() # 生成从浅粉到深粉的渐变调色板 color_palette <- colorRampPalette(c("#ffd6e0", "#ff8fab"))(length(bunnyConvexlhull)) # 按渐变颜色批量绘制切片 mapply(function(hull, col) { plot(hull, col = col, alpha = 0.7, add = TRUE) }, bunnyConvexlhull, color_palette) axes3d() title3d(main = "带渐变色彩的Z轴切片凸包兔子模型")
内容的提问来源于stack exchange,提问作者ninaPeng
相关产品推荐
相关产品推荐

