在R中如何无循环按Z轴从下到上切割点云?(以Bunny数据为例)
按0.01间隔沿Z轴切割点云(无for循环实现)
核心思路
利用R的向量化函数cut()对Z轴值进行分组,再通过split()直接分割点云数据,全程无需for循环。
实现代码
library("onion") data(bunny) # 获取Z轴的最小、最大值 z_min <- min(bunny[,3]) z_max <- max(bunny[,3]) # 生成0.01间隔的切割区间,调整端点确保覆盖所有Z值 z_breaks <- seq(floor(z_min * 100)/100, ceiling(z_max * 100)/100, by = 0.01) # 为每个点分配对应的Z区间标签 bunny$z_slice <- cut(bunny[,3], breaks = z_breaks, include.lowest = TRUE) # 按区间分割点云,得到所有切片数据 sliced_clouds <- split(bunny[,1:3], bunny$z_slice)
代码解释
seq()生成等间隔的区间边界:通过floor()和ceiling()将Z轴极值调整到0.01的整数倍,确保所有点都能被分配到对应区间cut()完成分组:include.lowest = TRUE保证最小Z值不会被排除在第一个区间外split()直接分割数据:返回的sliced_clouds是一个列表,每个元素对应一个Z轴切片的点云数据,无需手动迭代
查看与可视化切片
# 查看任意切片的数据,比如第5个切片 head(sliced_clouds[[5]]) # 可视化单个切片(示例:第8个切片,红色高亮) points3d(bunny, col = "gray") # 先显示完整点云 points3d(sliced_clouds[[8]], col = "red", size = 2) # 叠加显示目标切片
内容的提问来源于stack exchange,提问作者ninaPeng
相关产品推荐
相关产品推荐

