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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:25:21